Awesome.
stop
底下吵成一片,楼主跑了。楼主你快回来说说你的场景到底是什么样子的。
一流的代码是简单明了,
实在理解不了你的简单明了
....
而不是玩弄语法。
这不叫玩语法,这叫入乡随俗。就像函数式语言里用列表解析是习俗,而嵌套循环就是奇葩。
好的代码应该是 simple and abstracts repeated patterns (DRY).
我认为 In-logic assignment 做到了。同样的还有 Object.tap
、Object.try
、Object.blank?
、 ||=
(这个可以叫做 memoizable assignment partten?) 还有 Rails 里的 find_or_create
方法。
这些都是为了解决实际问题而生的 Ruby Idoim。我用着很 happy,这是一个好特性。
#28 楼 @zw963 In-logic assignment 是 Ruby Idiom。大家都这么用,甚至流行的 code stye 也推荐。
多一行代码更清晰一些
。。。真不能理解。。。
刚才随便在 Rails 和 Rubinius 里找了几行,讨论问题还是要回到现实世界:
https://github.com/rails/rails/blob/master/activerecord/lib/active_record/sanitization.rb#L59 https://github.com/rails/rails/blob/master/activerecord/lib/active_record/reflection.rb#L298 https://github.com/rails/rails/blob/master/activerecord/lib/active_record/nested_attributes.rb#L281 https://github.com/rubinius/rubinius/blob/master/lib/un.rb#L227
使用=(赋值符号)的返回作为表达式的值是可以的,但是记得在记得在两边加上括号。
# 好的 - 表明了赋值的意图
if (v = array.grep(/foo/)) ...
# 不好的
if v = array.grep(/foo/) ...
# 好的 - 不仅表明了赋值,还表明了正确的优先级
if (v = self.next_value) == "hello" ...
这是一个简单的唯一性验证问题吧,数据库加唯一索引。
我觉得都是楼主的应用设计问题,楼主把问题描述的无比复杂,我想问一下,你的应用和普通论坛有什么特殊的地方?大家都是多进程啊都并发啊。。
呵呵
#19 楼 @WilliamZhu 一点也不伤感.......
有的编辑器格式化功能会把别人对的很齐的代码给毁了。。
前几天看到 Rubinius 的开发者抱怨 MRI2.0 会在后置条件里赋值的时候强制输出 warning: https://twitter.com/brixen/status/233688352552005632
至于还有这么奇怪的差异可能他还没发现,,,大概是 MRI 里对后置的 if/unless 处理有所不同。而 Rubinius 返回的结果是正常的(没有让我惊讶)。
看了标题以为你要开一个十八禁的节点呢
哇
protip: "If you really want to make a point about the performance of a particular thing, can you at least pretend you're using science?"
http://unicorn.bogomips.org/KNOWN_ISSUES.html
On Ruby 1.8 prior to Ruby 1.8.7-p248, *BSD platforms have a broken stdio that causes failure for file uploads larger than 112K. Upgrade your version of Ruby or continue using Unicorn 1.x/3.4.x.
看起来是顺序换一下就行了。