Lan*_*ard 118 ruby typechecking
似乎无法找到如何轻松检查对象是否是布尔值.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)
Kon*_*ase 131
我能想到的最简单的方法:
# checking whether foo is a boolean
!!foo == foo
Run Code Online (Sandbox Code Playgroud)
mah*_*off 96
我发现这是简洁和自我记录:
[true, false].include? foo
Run Code Online (Sandbox Code Playgroud)
如果使用Rails或ActiveSupport,您甚至可以使用直接查询 in?
foo.in? [true, false]
Run Code Online (Sandbox Code Playgroud)
检查所有可能的值不是我建议的浮点数,但只有两个可能的值时可行!
hor*_*guy 84
BooleanRuby中没有类,唯一的检查方法就是做你正在做的事情(比较对象true和/ false或对象的类TrueClass和FalseClass).想不出你为什么需要这个功能,你能解释一下吗?:)
但是,如果您确实需要此功能,可以将其破解为:
module Boolean; end
class TrueClass; include Boolean; end
class FalseClass; include Boolean; end
true.is_a?(Boolean) #=> true
false.is_a?(Boolean) #=> true
Run Code Online (Sandbox Code Playgroud)
Ste*_*eet 23
如上所述,没有布尔类只有TrueClass和FalseClass,但你可以使用任何对象作为if/unless的主题,除了FalseClass和nil的实例外,一切都是真的
布尔测试返回FalseClass或TrueClass的实例
(1 > 0).class #TrueClass
Run Code Online (Sandbox Code Playgroud)
以下针对Object的monkeypatch将告诉您某些内容是TrueClass还是FalseClass的实例
class Object
def boolean?
self.is_a?(TrueClass) || self.is_a?(FalseClass)
end
end
Run Code Online (Sandbox Code Playgroud)
使用irb运行一些测试会得到以下结果
?> "String".boolean?
=> false
>> 1.boolean?
=> false
>> Time.now.boolean?
=> false
>> nil.boolean?
=> false
>> true.boolean?
=> true
>> false.boolean?
=> true
>> (1 ==1).boolean?
=> true
>> (1 ==2).boolean?
=> true
Run Code Online (Sandbox Code Playgroud)
Hen*_*k N 16
如果你的代码可以合理地写成case语句,那么这是相当不错的:
case mybool
when TrueClass, FalseClass
puts "It's a bool!"
else
puts "It's something else!"
end
Run Code Online (Sandbox Code Playgroud)
小智 5
作为布尔值的对象将具有TrueClass或FalseClass类,因此下面的单行应该可以做到这一点
mybool = true
mybool.class == TrueClass || mybool.class == FalseClass
=> true
Run Code Online (Sandbox Code Playgroud)
以下内容还将为您提供true/false布尔类型检查结果
mybool = true
[TrueClass, FalseClass].include?(mybool.class)
=> true
Run Code Online (Sandbox Code Playgroud)