2016-07-27 48 views
0

我正在Codewars(https://www.codewars.com/kata/typer-dot-js/)上進行此練習,並且在編寫布爾類型檢查器時遇到困難。布爾型的紅寶石書寫類型檢查器

根據我的理解,布爾或者返回true或者false。但我也讀過很多人說Ruby中的每個對象都是布爾值,除了nil。我試圖用一堆不同的方式編寫這個方法,但我只是沒有得到它。以下是一些嘗試。

class Typer 

def self.is_boolean? input 
    input == true || false 
end 

def self.is_boolean? input 
    input.class == TrueClass || FalseClass 
end 

def self.is_boolean? input 
    input == nil ? false : true 
end 
+0

可能在Ruby類中實現真實性的副本(http://stackoverflow.com/questions/19973771/implement-truthiness-in-ruby-class) –

+0

ruby​​中的所有內容都是真的,除非爲零。 – CryptoPiggy

回答

2

||不能按預期工作。例如,

input == true || false 

正在測試如果

input == true 

是truthy,或者如果

false 

是truthy。請注意,後者不在測試input == false。這是你的主要誤解。

0

Ruby沒有將值轉換爲布爾值的內置方法。這可能是通過設計,因爲Ruby中唯一的錯誤值是false和nil。所有其他值(空字符串,空數組,空散列,0)都是true。有,然而,一個「黑客」,它可以用於將值轉換爲布爾:這就是所謂的「梆梆」或「雙響」,它由兩個布爾否定的運營商,像這樣:

!!nil 
=> false 

!!false 
=> false 

!!"" 
=> true 

!!0 
=> true 

!![] 
=> true 

!!{} 
=> true