one*_*nch 9 ruby ruby-on-rails
有人可以解释这个推理吗?花了30分钟试图弄清楚为什么我的布尔方法返回nil并发现在Ruby中:
2.2.1 :001 > nil && true
=> nil
2.2.1 :002 > nil && false
=> nil
Run Code Online (Sandbox Code Playgroud)
由于nil是假值,我原以为输出nil && true是假的.此外,它似乎违背了条件运算符应返回布尔值的想法.
这背后的理由是什么?
更新
因此布尔运算符不可交换是有道理的:即
nil && false != false && nil
Run Code Online (Sandbox Code Playgroud)
对于其他人看到这一点,我的问题是在rails中我有一个声明,如:
def some_method?
object.attr && object.attr > something
end
Run Code Online (Sandbox Code Playgroud)
但是当object.attr为nil时,函数将为nil.在大多数情况下这很好,但是当将布尔方法链接在一起时,并没有那么多.我改为将其更改为:
def some_method?
object.attr.present? && object.attr > something
end
Run Code Online (Sandbox Code Playgroud)
你可以用vanilla Ruby做同样的事情:
def some_method?
!!object.attr && object.attr > something
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7976 次 |
| 最近记录: |