我已经阅读了一些内容,包括this和this,但我认为下面的示例与他们所说的不同。一个人实际上在讨论中提出了一个类似的例子,但它被忽略了。
因此,在 irb 中运行(忽略条件中有关赋值的警告):
(puts x) if (x = 0) # NameError: undefined local variable or method `x'...
x # => 0
(puts x) if (x = 0) # "0", => nil
但第二次没有错误。
这是否有意义,即使以“一旦您了解解析器真正在做什么并且这只是一些优化一切都会变得清晰”的方式?因为对我来说,这似乎很不受欢迎。
需要明确的是,上述条件应该等价于(对吗?)
if newvar=0
puts newvar
end
这不会引发错误。
更新:自从提出这个问题以来,关于这个主题的帖子甚至更多。例如,
http://seejohncode.com/2012/07/31/ruby-gotcha-single-line-conditionals/。