似乎無法找到如何檢查對象是否容易布爾值。 Ruby中有這樣的事情嗎?檢查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))
似乎無法找到如何檢查對象是否容易布爾值。 Ruby中有這樣的事情嗎?檢查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
進行比較)。想不到爲什麼你會需要這個功能,你能解釋一下嗎? :)
如果你真的然而需要這個功能,你可以破解它:
module Boolean; end
class TrueClass; include Boolean; end
class FalseClass; include Boolean; end
true.is_a?(Boolean) #=> true
false.is_a?(Boolean) #=> true
嘗試根據當前值進行類型轉換。 – 2010-06-12 10:45:23
'你爲什麼會這麼做?' (和衍生產品)只是工程師可能做的另一個最令人討厭的問題之一:) – vemv 2014-03-27 14:20:33
+1,因爲我可以在rspec中使用它,例如:expect(some_method?(data))to be_a(Boolean)' – Automatico 2014-10-14 15:56:07
如上所述沒有Boolean類只是TrueClass和FalseClass但是你可以使用任何對象作爲主題如果/除非一切都是真實的,除了FalseClass的實例和零
布爾測試返回FalseClass的實例或TrueClass
(1 > 0).class #TrueClass
以下猴補丁到對象將告訴你什麼是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或self == false'即可。這些是TrueClass和FalseClass的唯一實例。 – Chuck 2010-06-12 18:50:55
@chuck返回除Time.now.boolean以外的相同結果嗎?返回nil。任何想法爲什麼? – 2010-06-12 22:24:46
在方法中定義對自身的類檢查有點不符合要求。你應該定義兩個'boolean'版本,一個用於TrueClass/FalseClass,一個用於Object。 – 2010-06-13 19:41:46
一個布爾對象將有一個類的TrueClass或FalseClass,所以下面的一行應該做的誘騙
mybool = true
mybool.class == TrueClass || mybool.class == FalseClass
=> true
下也能給你真/假布爾型檢查結果
mybool = true
[TrueClass, FalseClass].include?(mybool.class)
=> true
如果你的代碼能夠明智地寫成一個case語句,這是相當不錯的:
case mybool
when TrueClass, FalseClass
puts "It's a bool!"
else
puts "It's something else!"
end
所以試試吧(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
。
我覺得這是簡潔和自我記錄:
[true, false].include? foo
如果使用Rails或的ActiveSupport,您可以使用in?
foo.in? [true, false]
檢查,對所有可能的值ISN連做直接查詢我不推薦漂浮物,但只有兩種可能的價值時纔可行!
最好的答案,雖然我也喜歡'foo == true或者foo == false',以便有人發表評論。 – 2016-06-10 20:53:56
我喜歡這個,因爲它比'!! foo == foo'更有意思。 – stringsn88keys 2017-11-14 19:38:32
不。不像你有你的代碼。沒有任何名爲布爾的類。現在你有了所有的答案,你應該可以創建一個並使用它。你知道如何創建課程嗎?我只是來到這裏,因爲我自己只是在想這個想法。許多人可能會說「爲什麼?你必須知道Ruby如何使用布爾值」。這就是爲什麼你得到了你所做的答案。所以謝謝你的問題。食物的思想。爲什麼Ruby沒有布爾類?
NameError: uninitialized constant Boolean
請記住,對象沒有類型。他們是班級。對象有數據。所以這就是爲什麼當你說數據類型時,這有點不恰當。
也嘗試蘭特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
至少我們現在有這個類,但誰知道如何獲得正確的值?
相似:[檢查是否變量是一個字符串在紅寶石?](http://stackoverflow.com/questions/7749416/check-whether-a-variable-is-a- string-in-ruby?rq = 1) – nawfal 2014-07-24 01:58:52