在Ruby中赋值时的布尔运算

在Ruby中赋值时的布尔运算,ruby,boolean-expression,Ruby,Boolean Expression,我是Ruby新手,我做了以下工作: c = {} # Some code in the middle c['a'] = c['a'] or 0 现在我希望它是这样工作的:如果c['a']是nil,那么c['a']或0将返回0。所以c['a']的值应该是0 但是c['a']的值为nil。为什么会发生这种情况?=的优先级高于或,因此需要使用括号使其达到预期效果: c['a'] = (c['a'] or 0) 或者像往常一样使用|:)=的优先级高于或,因此需要使用括号使其达到预期效果: c['a'

我是Ruby新手,我做了以下工作:

c = {}
# Some code in the middle
c['a'] = c['a'] or 0
现在我希望它是这样工作的:如果
c['a']
nil
,那么
c['a']或0将返回0。所以
c['a']
的值应该是0


但是
c['a']
的值为
nil
。为什么会发生这种情况?

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

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

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

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

c['a'] = (c['a'] or 0)
或者像往常一样使用
|
:)

。您已按如下方式分组的内容:

(c['a'] = c['a']) or 0
基本上什么也做不了。您应该改用
|

c['a'] = c['a'] || 0
或者简单地说:

c['a'] ||= 0
请注意,
/
&&
的行为与
/
|
相同。您已按如下方式分组的内容:

(c['a'] = c['a']) or 0
基本上什么也做不了。您应该改用
|

c['a'] = c['a'] || 0
或者简单地说:

c['a'] ||= 0

请注意,
/
&&
的行为与
/
|

是“
与Ruby中的
|
不同”您最喜欢的说法?@muistooshort它似乎经常出现
:p
。事实上,我把它(和其他一些常见的东西)作为剪贴板片段留在评论中。(谢谢你纠正我愚蠢的打字错误!)哦..棘手,棘手。从上面的文章中,我想最好只使用
作为控件修饰符。谢谢你的链接和答案。@Aishwar正确。一些Ruby程序员主张永远不要使用
/
,因为它们“古怪”,但只要你理解它们的区别,在它们应该在的地方使用它们是没有错的。是“
与Ruby中的
|
不同吗?”你最喜欢的一句话?@muistooshort它似乎经常出现
:P
。事实上,我把它(和其他一些常见的东西)作为剪贴板片段留在评论中。(谢谢你纠正我愚蠢的打字错误!)哦..棘手,棘手。从上面的文章中,我想最好只使用
作为控件修饰符。谢谢你的链接和答案。@Aishwar正确。一些Ruby程序员主张永远不要使用
/
,因为它们“古怪”,但只要你理解它们的区别,在它们应该在的地方使用它们是没有错的。是的,似乎我应该在大多数事情上使用
|
:)是的,似乎我应该用
|
来处理大多数事情:)