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中,只有nil
和false
是falsy,所有其他值(包括数字,字符串、列表和任何 user-defined class) 都是真实的。
如果你想要1 == true
和0 == false
,你应该显式地比较值,例如:
if x == 1
# do something
end
那是因为,在Ruby中,只有false
和nil
是假的。其余计算结果为 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
在 Python 中,如果我使用 bool
函数,我可以确定表达式计算的布尔值。例如:
bool(1)
#=> True
Ruby中是否存在这样的结构?我似乎无法找到它确实存在的证据。我目前不得不使用等价测试来确定布尔值,并且想知道是否有更方便的方法来执行此操作。
总是classic
!!a
这也适用于 Javascript、C++ 和(使用 not
而不是 !
)Python。
请记住,Ruby 与 Python 的真实性概念不同。在 Python 中,很多 "empty" 对象都是假的,自定义 classes 可以通过魔术方法确定其真实性。在Ruby中,只有nil
和false
是falsy,所有其他值(包括数字,字符串、列表和任何 user-defined class) 都是真实的。
如果你想要1 == true
和0 == false
,你应该显式地比较值,例如:
if x == 1
# do something
end
那是因为,在Ruby中,只有false
和nil
是假的。其余计算结果为 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