用于布尔值的Ruby写型检查器

时间:2016-07-27 06:42:27

标签: ruby class null boolean

我正在使用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

2 个答案:

答案 0 :(得分:2)

||没有按预期工作。例如,

input == true || false

正在测试是否

input == true

是真的,或者如果

false

是真的。请注意,后者不是在测试input == false。这是你的主要误解。

答案 1 :(得分:0)

Ruby没有将值转换为Boolean的内置方法。这可能是设计上的,因为Ruby中唯一的错误值是假的,没有。所有其他值(空字符串,空数组,空哈希值,0)都为真。然而,那里有一个" hack"可用于将值转换为布尔值:它被称为" bang-bang"或者" double-bang"它由两个布尔否定运算符组成,如下所示:

!!nil
=> false

!!false
=> false

!!""
=> true

!!0
=> true

!![]
=> true

!!{}
=> true