有没有一种简单的方法可以在不使用表达式的情况下将值计算为true / false?

时间:2012-06-22 10:29:12

标签: ruby

Ruby中是否有一种简单的方法可以从某些内容中获取true / false值而无需将其明确地评估为true或false

e.g。怎么会更简洁地表达

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

有什么方法可以按照

的方式做点什么
initialization_completed.true?

显然没有多少但是因为我在Ruby的zen花园里我不妨拥抱它

编辑(我已更新示例)

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

原始示例

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

1 个答案:

答案 0 :(得分: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,对于其他所有内容,它将返回false。我们需要另一个否定来使它产生“正常”值。