3

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

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

在 Python 中,我可以这样做:

return True if obj else False
4

3 回答 3

10

一个常见的 Ruby 习惯用法是:

def test
  !!get_from_somewhere
end

爆炸将一个对象变成它的“布尔等价物”:

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

请注意,在 Ruby 中,与 Python 不同,只是在布尔上下文falsenil计算为 false,例如:

!!0
# => true
于 2013-09-20T10:58:53.673 回答
7

这 !是非/否定运算符。它将对象转换为布尔变量,该变量是其值的负数。因此,如果 test = 1,则 !test 为假,因为 test 为真。(任何不是 false 或 nil 的值都是 true。)

使用 !!不是特定的运算符,它只是!两次。所以,如果一个值既不是 false 也不是 nil,那么 !! 返回真。

话虽这么说,编写几乎等同于 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
于 2013-09-20T11:19:49.273 回答
0

这个怎么样:

obj ? true : false
于 2013-09-20T14:32:58.230 回答