检查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
类,检查的唯一方法就是做你正在做的事(把对象与true
和false
或对象的类与TrueClass
和FalseClass
)。 想不到为什么你需要这个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我们现在有这样的课,但谁知道如何得到正确的价值呢?