检查Ruby对象是否是布尔值

似乎无法find如何检查对象是否容易布尔值。 Ruby中有这样的事情吗?

true.is_a?(Boolean) false.is_a?(Boolean) 

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

 some_var = rand(1) == 1 ? true : false (some_var.is_a?(TrueClass) || some_var.is_a?(FalseClass)) 

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

 # checking whether foo is a boolean !!foo == foo 

在Ruby中没有Boolean类,检查的唯一方法就是做你正在做的事(把对象与truefalse或对象的类与TrueClassFalseClass )。 想不到为什么你需要这个function,你能解释一下吗? 🙂

如果你真的需要这个function,你可以在

 module Boolean; end class TrueClass; include Boolean; end class FalseClass; include Boolean; end true.is_a?(Boolean) #=> true false.is_a?(Boolean) #=> true 

我觉得这是简洁和自我logging:

 [true, false].include? foo 

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

 foo.in? [true, false] 

检查所有可能的值是不是我推荐的浮动,但只有两个可能的值时可行!

如上所述,没有布尔类只是TrueClass和FalseClass,但是你可以使用任何对象作为if / unless的主体,除了FalseClass的实例和一切都是真实的

布尔testing返回FalseClass或TrueClass的一个实例

 (1 > 0).class #TrueClass 

以下monkeypatch对象会告诉你是否是TrueClass或FalseClass的一个实例

 class Object def boolean? self.is_a?(TrueClass) || self.is_a?(FalseClass) end end 

用irb运行一些testing给出以下结果

 ?> "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 

如果你的代码可以明智地写成一个case语句,这是相当不错的:

 case mybool when TrueClass, FalseClass puts "It's a bool!" else puts "It's something else!" end 

一个布尔型的对象可能有一个TrueClass类或FalseClass类,所以下面的一行应该做的

 mybool = true mybool.class == TrueClass || mybool.class == FalseClass => true 

以下也会给你true / false布尔types的检查结果

 mybool = true [TrueClass, FalseClass].include?(mybool.class) => true 

所以试试这个(x == true) ^ (x == false)注意你需要括号,但是这更美观和紧凑。

它甚至通过build议像“cuak”,而不是“cuak”… class X; def !; self end end ; x = X.new; (x == true) ^ (x == false) class X; def !; self end end ; x = X.new; (x == true) ^ (x == false)

注意 :请注意 ,这是非常基本的,您可以在其他语言中使用它,但不提供“事物是布尔型的”。

注2 :你也可以用这个来说一下: "red", "green", "blue"如果你add more XORS …或者说这个东西是其中的一个: 4, 5, 8, 35

不,不像你有你的代码。 没有任何名为布尔的类。 现在所有的答案你应该能够创build一个并使用它。 你知道如何创build课程不是吗? 我只是来到这里,因为我自己只是在想这个想法。 许多人可能会说“为什么?你必须知道Ruby如何使用布尔值”。 这就是为什么你得到了你所做的答案。 所以谢谢你的问题。 食物的思想。 为什么Ruby没有布尔类?

 NameError: uninitialized constant Boolean 

请记住,对象没有types。 他们是class级。 对象有数据。 所以这就是为什么当你说数据types时,这有点不恰当。

也尝试兰特2,因为兰特1似乎总是给0.兰特2将给1或0在这里点击运行几次。 https://repl.it/IOPx/7

虽然我不知道如何去做一个布尔类自己。 我已经尝试过,但…

 class Boolean < TrueClass self end true.is_a?(Boolean) # => false false.is_a?(Boolean) # => false 

至less我们现在有这样的课,但谁知道如何得到正确的价值呢?

Interesting Posts