如何隐式地将Ruby对象转换为boolean

时间:2016-09-01 11:55:53

标签: ruby

可以将一些方法添加到Ruby对象中以实现自动转换为boolean吗?例如。 if obj == true

2 个答案:

答案 0 :(得分:1)

==:==方法的语法糖。您可以定义对象自己的:==方法,您可以根据内部对象的状态指定比较结果应为true和何时false

class SomeClass
  def ==(val)
    # specyfy the comparision behaviour
  end
end

然后使用它:

sc = SomeClass.new
sc == true
=> true # or false, depending on :== method's implementation

答案 1 :(得分:0)

大多数情况下,您要检查对象的真实性,而不是明确地将其转换为布尔值。这就是你写的

if obj
  # here, obj is truethy
else
  # here, object is falsey
end

在Ruby中,只有falsenil被定义为falsey。所有其他对象都是真实的。这可以在如上所示的条件下使用。因此,在Ruby中显式检查truefalse是非常罕见的。

那就是说,如果你想根据其真实性将对象转换为布尔值,你可以使用双重否定,即

obj_truthyness = !!obj
# => true or false