首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何检查Ruby对象是否为布尔值

如何检查Ruby对象是否为布尔值
EN

Stack Overflow用户
提问于 2010-06-12 17:57:57
回答 7查看 113.8K关注 0票数 137

我似乎不能轻易地检查一个对象是否是布尔值。在Ruby中有这样的东西吗?

代码语言:javascript
复制
true.is_a?(Boolean)
false.is_a?(Boolean)

现在我正在做这件事,我想把它缩短:

代码语言:javascript
复制
some_var = rand(1) == 1 ? true : false
(some_var.is_a?(TrueClass) || some_var.is_a?(FalseClass))
EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2010-06-14 03:42:55

我能想到的最简单的方法:

代码语言:javascript
复制
# checking whether foo is a boolean
!!foo == foo
票数 143
EN

Stack Overflow用户

发布于 2014-09-09 16:44:21

我发现这是简明扼要和自我记录的:

代码语言:javascript
复制
[true, false].include? foo

如果使用Rails或ActiveSupport,甚至可以使用in?进行直接查询

代码语言:javascript
复制
foo.in? [true, false]

对于浮点数,我不建议检查所有可能的值,但当只有两个可能的值时,这是可行的!

票数 129
EN

Stack Overflow用户

发布于 2010-06-12 19:24:48

如上所述,除了TrueClass和FalseClass之外,没有布尔类,但是,您可以使用任何对象作为if/除非的主语,并且除了FalseClass和nil的实例之外,所有内容都为true

布尔测试返回FalseClass或TrueClass的实例

代码语言:javascript
复制
(1 > 0).class #TrueClass

下面的monkeypatch to Object将告诉你某事物是TrueClass还是FalseClass的实例

代码语言:javascript
复制
class Object
  def boolean?
    self.is_a?(TrueClass) || self.is_a?(FalseClass) 
  end
end

使用irb运行一些测试会得到以下结果

代码语言:javascript
复制
?> "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
票数 27
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3028243

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档