对于其他类型的变量,我使用|| =,但这对布尔值不起作用(即使x先前已将x指定为false,x || = true也会将x指定为true).
我认为这会奏效:
x = true unless defined?(x)
但事实并非如此:出于某种原因,它将x分配给nil. (这里的解释将不胜感激.)
我知道一种有效的方法:
unless defined?(x) x = true end
但它相当冗长.是否有更简洁的方法将默认值赋给Ruby中的布尔变量?
解决方法
你必须定义?首先,否则解析器到达x =然后在运行之前定义x(使其为零),除非:
defined?(x) or x = true x #=> true
x = false defined?(x) or x = true x #=> false
执行if / unless块(而不是post-if /除非单行)也可以:
unless defined?(x) x = true end x #=> true
x = false unless defined?(x) x = true end x #=> false