Answers:
我能想到的最简单的方法:
# checking whether foo is a boolean
!!foo == foo
我发现这是简洁明了的文档:
[true, false].include? foo
如果使用Rails或ActiveSupport,甚至可以使用以下命令进行直接查询 in?
foo.in? [true, false]
我不建议针对浮点数检查所有可能的值,但是当只有两个可能的值时可行!
foo == true or foo == false
有人发表评论。
!!foo == foo
。
Boolean
Ruby中没有类,唯一的检查方法是执行您正在做的事情(将对象与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
expect(some_method?(data)).to be_a(Boolean)
"quotes"
如上所述,没有布尔类,只有TrueClass和FalseClass,但是您可以将任何对象用作if / unless的主题,并且除FalseClass和nil的实例外,其他所有内容都为true
布尔测试返回FalseClass或TrueClass的实例
(1 > 0).class #TrueClass
以下针对Object的Monkeypatch将告诉您某物是TrueClass还是FalseClass的实例
class Object
def boolean?
self.is_a?(TrueClass) || self.is_a?(FalseClass)
end
end
使用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
self == true or self == false
。这些是TrueClass和FalseClass的唯一实例。
boolean
,一个用于TrueClass / FalseClass,一个用于Object。
Time#==
Ruby 1.8 版本中的错误导致与非Time值的比较返回nil而不是false。
因此,请尝试此 (x == true) ^ (x == false)
注释,但您需要使用括号,但这会更加美观和紧凑。
它甚至通过建议的提示,例如“ cuak”,而不是“ cuak” ... class X; def !; self end end ; x = X.new; (x == true) ^ (x == false)
注意:请注意,这是如此基础,您也可以在其他语言中使用它,它没有提供“事物是布尔值”。
注2:您也可以使用它来表示事物是??之一:"red", "green", "blue"
如果您add more XORS
...或说这个事物是??之一4, 5, 8, 35
。
这个gem通过有用的方法向Ruby添加了一个布尔类。
https://github.com/RISCfuture/boolean
用:
require 'boolean'
那你的
true.is_a?(Boolean)
false.is_a?(Boolean)
将完全按照您的预期工作。
不,不像您有您的代码。没有任何名为Boolean的类。现在,有了所有答案,您应该可以创建一个答案并使用它。您知道如何创建类吗?我只是来这里是因为我自己只是想知道这个主意。许多人可能会说“为什么?您必须只知道Ruby如何使用布尔值”。这就是为什么您得到答案的原因。所以,谢谢你的提问。值得深思。Ruby为什么没有布尔类?
NameError: uninitialized constant Boolean
请记住,对象没有类型。他们是课程。对象有数据。因此,当您说数据类型时,这有点用词不当。
也请尝试rand 2,因为rand 1似乎总是给出0。rand 2将给出1或0单击运行几次。 https://repl.it/IOPx/7
尽管我自己也不知道如何制作布尔类。我已经尝试过了,但是...
class Boolean < TrueClass
self
end
true.is_a?(Boolean) # => false
false.is_a?(Boolean) # => false
至少我们现在有该课程,但是谁知道如何获得正确的价值观?