相关疑难解决方法(0)

检查Ruby对象是否是布尔值

似乎无法找到如何轻松检查对象是否是布尔值.Ruby中有这样的东西吗?

true.is_a?(Boolean)
false.is_a?(Boolean)
Run Code Online (Sandbox Code Playgroud)

现在我正在这样做,并希望缩短它:

some_var = rand(1) == 1 ? true : false
(some_var.is_a?(TrueClass) || some_var.is_a?(FalseClass))
Run Code Online (Sandbox Code Playgroud)

ruby typechecking

118
推荐指数
6
解决办法
10万
查看次数

Ruby中的Nil和boolean

有人可以解释这个推理吗?花了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)

ruby ruby-on-rails

9
推荐指数
1
解决办法
7976
查看次数

标签 统计

ruby ×2

ruby-on-rails ×1

typechecking ×1