0

Ruby 中是否有一种简单的方法可以从某事物中获取真/假值,而无需明确地将其评估为真或假

例如,如何更简洁地表达

class User
  def completed_initialization?
    initialization_completed == 1 ? true : false
  end
end

有什么方法可以做一些事情

initialization_completed.true?

显然没什么,但既然我在 Ruby 的禅宗花园里,我不妨拥抱它

编辑(我已经更新了示例)

正如@Sergio Tulentsev 非常温和地指出的那样,这个问题的措辞非常糟糕。原始示例(如下)当然会直接计算为布尔值。我仍在努力寻找一个例子来说明我的意思,但塞尔吉奥的双重否定实际上正是我所寻找的。

原始示例

class User
  def top_responder
    responses.count > 10 ? true : false
  end
end
4

1 回答 1

5

>运算符已经返回布尔值。所以它可以只是

  def top_responder
    responses.count > 10
  end

要将任意值转换为布尔值,我提供了这个双重否定的小技巧。

t = 'foo'
!!t # => true

t = 1
!!t # => true

t = 0
!!t # => true

t = nil
!!t # => false

第一个否定将值“转换”为布尔值并将其反转。也就是说,它将为nil/false和其他所有内容返回 true。我们需要另一个否定来使其产生“正常”值。

于 2012-06-22T10:30:16.807 回答