红宝石:" a = nil || 2008 "和" a = nil or 2008 "有什么区别

  • 本文关键字:nil 2008 区别 or 红宝石 ruby
  • 更新时间 :
  • 英文 :


当我在 Irb 中计算表达式a = nil || 2008时,我得到的答案是 2008,a被分配了值 2008这是正确的||因为运算符返回他们的第一个参数,除非它是falsenil

但是当我在 Irb 控制台上执行类似 a = nil or 2008 的操作时,a 被分配nil,我得到的表达式的评估的返回值仍然是 2008

它与运算符优先级有关吗?我只是想知道为什么它以这种方式工作,有人可以对此有所了解吗?

||or有不同的优先级。这是用来的,例如用于错误处理:

foo = do_something_which_could_fail_and_return_nil_then(...) or deal_with_error(...)

有些人认为应该避免,即 根本不应该使用orand

在您的情况下,优先级顺序如下(从高到低):

  1. ||
  2. =
  3. or

所以这里a = nil || 2008

  • 操作1:nil || 2008
  • 操作 2:a = Operation 1

a = nil or 2008

  • 操作 1:a = nil
  • 操作 2:返回 2008 的Operation 1 or 2008,因为操作 1 nil

你自己回答了。这是由于运算符优先级。||具有较高的优先级,然后 = 和 "or" 的优先级低于 '='。下面是红宝石运算符的优先级表

如果您使用

a = (nil or 2008)

那么它将给出与

a = nil || 2008

最新更新