当我在 Irb 中计算表达式a = nil || 2008
时,我得到的答案是 2008,a
被分配了值 2008,这是正确的||
因为运算符返回他们的第一个参数,除非它是false
或nil
。
但是当我在 Irb 控制台上执行类似 a = nil or 2008
的操作时,a
被分配nil
,我得到的表达式的评估的返回值仍然是 2008。
它与运算符优先级有关吗?我只是想知道为什么它以这种方式工作,有人可以对此有所了解吗?
||
和or
有不同的优先级。这是用来的,例如用于错误处理:
foo = do_something_which_could_fail_and_return_nil_then(...) or deal_with_error(...)
有些人认为应该避免,即 根本不应该使用or
和and
。
在您的情况下,优先级顺序如下(从高到低):
-
||
-
=
-
or
所以这里a = nil || 2008
- 操作1:
nil || 2008
- 操作 2:
a = Operation 1
和a = nil or 2008
- 操作 1:
a = nil
- 操作 2:返回 2008 的
Operation 1 or 2008
,因为操作 1nil
你自己回答了。这是由于运算符优先级。||具有较高的优先级,然后 = 和 "or" 的优先级低于 '='。下面是红宝石运算符的优先级表
如果您使用
a = (nil or 2008)
那么它将给出与
a = nil || 2008