if..else..end的快捷方式

时间:2013-09-20 10:57:40

标签: ruby if-statement

这样的代码有什么样的快捷方式吗?

def test
  obj = get_from_somewhere()
  if obj
    true
  else
    false
  end
end

在Python中,我可以这样做:

return True if obj else False

3 个答案:

答案 0 :(得分:10)

实现这一目标的常见Ruby习语是:

def test
  !!get_from_somewhere
end

double bang将对象转换为“布尔等价物”:

object = 'foo'
!object
# => false
!!object
# => true

请注意,在Ruby中,与Python不同,falsenil在布尔上下文中的计算结果为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