加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – Ruby中的Nil和boolean

发布时间:2020-12-16 19:16:53 所属栏目:百科 来源:网络整理
导读:有人可以解释这个推理吗?花了30分钟试图弄清楚为什么我的布尔方法返回nil并在 Ruby中发现: 2.2.1 :001 nil true = nil2.2.1 :002 nil false = nil 由于nil是一个假值,我本来期望nil的输出.真的是假的.此外,它似乎违背了条件运算符应返回布尔值的想法. 这背
有人可以解释这个推理吗?花了30分钟试图弄清楚为什么我的布尔方法返回nil并在 Ruby中发现:
2.2.1 :001 > nil && true
 => nil
2.2.1 :002 > nil && false
 => nil

由于nil是一个假值,我本来期望nil&&的输出.真的是假的.此外,它似乎违背了条件运算符应返回布尔值的想法.

这背后的理由是什么?

更新

所以布尔运算符不可交换是有道理的:即

nil && false != false && nil

对于其他人看到这一点,我的问题是在rails中我有一个声明如下:

def some_method?
  object.attr && object.attr > something
end

但是当object.attr为nil时,函数将为nil.在大多数情况下这很好,但是将布尔方法链接在一起时,并没有那么多.我改为将其改为:

def some_method?
  object.attr.present? && object.attr > something
end

你可以用vanilla Ruby做同样的事情:

def some_method?
  !!object.attr && object.attr > something
end

解决方法

声明按顺序通过条件,将在获得有效结果时停止并返回上次执行的评估值.

与&&它停在一个假值,||将停止在一个真正的价值.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读