Ruby 是否有像 Python 这样的 `bool` 函数?

Does Ruby have a `bool` function like Python?

在 Python 中,如果我使用 bool 函数,我可以确定表达式计算的布尔值。例如:

bool(1)
#=> True

Ruby中是否存在这样的结构?我似乎无法找到它确实存在的证据。我目前不得不使用等价测试来确定布尔值,并且想知道是否有更方便的方法来执行此操作。

总是classic

!!a

这也适用于 Javascript、C++ 和(使用 not 而不是 !)Python。

请记住,Ruby 与 Python 的真实性概念不同。在 Python 中,很多 "empty" 对象都是假的,自定义 classes 可以通过魔术方法确定其真实性。在Ruby中,只有nilfalse是falsy,所有其他值(包括数字,字符串、列表和任何 user-defined class) 都是真实的。

如果你想要1 == true0 == false,你应该显式地比较值,例如:

if x == 1
  # do something
end

那是因为,在Ruby中,只有falsenil是假的。其余计算结果为 true.

换句话说:

def to_bool(x)
  !!x
end

to_bool(1)          #=> true
to_bool(0)          #=> true
to_bool("0")        #=> true
to_bool("1")        #=> true
to_bool(Object.new) #=> true

to_bool(nil)        #=> false

如果您知道要使用哪种类型,您可以尝试在 Ruby 中模仿 Python 的逻辑。

空列表、散列或字符串在 Ruby 中为真,因此您需要检查它们是否不为空:

![].empty?
# => false
![3].empty?
# => true
!"".empty?
# => false
!"foo".empty?
# => true

同样,您可以检查整数是否不为零:

0 != 0
#=> false
1 != 0
#=> true
3.14 != 0
#=> true