在Ruby中赋值时的布尔运算

时间:2012-10-14 15:42:42

标签: ruby boolean-expression

我是Ruby新手,我做了以下事情:

c = {}
# Some code in the middle
c['a'] = c['a'] or 0

现在我希望这可以这样工作:如果c['a']nil,那么c['a'] or 0将返回0.因此c['a']的值应为0. < / p>

c['a']的值为nil。为什么会这样?

2 个答案:

答案 0 :(得分:4)

or is not the same as || in Ruby。你所拥有的就像这样分组:

(c['a'] = c['a']) or 0

基本上什么都不做。您应该使用||代替:

c['a'] = c['a'] || 0

或简单地说:

c['a'] ||= 0

请注意,and / &&or / ||的行为相同。

答案 1 :(得分:2)

=的优先级高于or,因此您需要括号才能使其达到预期效果:

c['a'] = (c['a'] or 0)

或者像往常一样使用||:)