我是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
。为什么会这样?
答案 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)
或者像往常一样使用||
:)