【发布时间】:2012-06-13 20:27:12
【问题描述】:
为什么这段代码不起作用?
b if b = true
错误:undefined local variable or method `b'
但这确实:
if b = true
b
end
他们不应该是一样的吗?
【问题讨论】:
-
甚至可以简化:
k if k = 1和if k = 1; k; end -
这有点让我烦恼;我不认为你的代码不能工作有什么深层次的原因,所以也许他们会在下一个版本的 ruby 中添加这个功能。
-
条件是表达式,就像 Ruby 中的其他任何东西一样,所以当解析器正在寻找分配变量时,这种行为是预期的,并且很难改变。我确实同意,但它非常不直观,并且不遵循最小意外原则。
-
作为编码实践的问题,我宁愿在条件中看不到作业。它使代码的维护变得更加困难,因为很难判断分配是有意的还是发生了拼写错误,它应该是一个相等测试 (
==)。它没有按您预期的那样工作这一事实只是在代码审查中标记它的更多理由。
标签: ruby