【发布时间】:2012-11-09 04:59:11
【问题描述】:
对于其他类型的变量,我使用||=,但这不适用于布尔值(x ||= true 将 x 分配为 true,即使 x 之前已分配为 false)。
我认为这会起作用:
x = true unless defined?(x)
但它没有:它出于某种原因将 x 分配给 nil。 (这里的解释将不胜感激。)
我确实知道一种有效的方法:
unless defined?(x)
x = true
end
但它相当冗长。有没有更简洁的方法来为 Ruby 中的布尔变量分配默认值?
【问题讨论】:
-
您是否有理由不希望将 x 分配给 nil(在所有意图和目的上都等同于 false)?
-
@sylvain.joyeux 因为他希望它是
true,而不是虚假的。 -
@sylvain.joyeux 使用 nil 代替 false 很好,但它不能解决
||=的问题。如果您尝试使用||=为 x 分配默认值,并且 x 之前已分配给 nil,它将被覆盖而不是保留 nil 的值(因为 nil 是假的)。
标签: ruby