2016-07-27 3 views
0

Я работаю над этим упражнением на Codewars (https://www.codewars.com/kata/typer-dot-js/), и у меня возникли проблемы с записью проверки типов для булевых.Ruby write type checker for booleans

Основываясь на моем понимании, booleans возвращают 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 ​​истинно, за исключением nil и false. – CryptoPiggy

ответ

2

|| не работает должным образом. Например,

input == true || false 

тестирует если

input == true 

является truthy, или если

false 

является truthy. Обратите внимание, что последний не тестирует input == false. И это ваше главное недоразумение.

0

Ruby не имеет встроенного метода для преобразования значений в Boolean. Это может быть по дизайну, поскольку единственные ложные значения в Ruby - false и nil. Все остальные значения (пустая строка, пустой массив, пустой хеш, 0) являются истинными. Там, однако, «взломать», который может быть использована для преобразования значения в логическое значение: это называется «пиф-паф» или «двойной удар» и состоит из двух логических операторов отрицания, например:

!!nil 
=> false 

!!false 
=> false 

!!"" 
=> true 

!!0 
=> true 

!![] 
=> true 

!!{} 
=> true