这样的代码有什么样的快捷方式吗?
def test
obj = get_from_somewhere()
if obj
true
else
false
end
end
在Python中,我可以这样做:
return True if obj else False
答案 0 :(得分:10)
实现这一目标的常见Ruby习语是:
def test
!!get_from_somewhere
end
double bang将对象转换为“布尔等价物”:
object = 'foo'
!object
# => false
!!object
# => true
请注意,在Ruby中,与Python不同,false
和nil
在布尔上下文中的计算结果为false,例如:
!!0
# => true
答案 1 :(得分:7)
!是非/否定运算符。它将对象转换为布尔变量,该值是其值的负值。所以,如果test = 1,那么!test是错误的,因为test是真的。 (任何非假或零的值都是真的。)
使用!!不是特定的运营商,它只是!两次。所以,如果一个值既不是假也不是零,那么!!返回true。
话虽这么说,编写几乎等同于PHP的表达式的一种更明显的方法是三元运算符:
def test
obj = get_from_somewhere()
obj ? true : false # Returns true as long as obj is neither false nor nil.
end
或者,如果您不需要obj变量,则更简单:
def test
get_from_somewhere() ? true : false # Returns true as long as get_from_somewhere() is neither false nor nil.
end
答案 2 :(得分:0)
这个怎么样:
obj ? true : false