说我有以下内容:
class Foo
def inspect
false
end
def ==(other)
false == other
end
end
foo = Foo.new # => false
foo # => false
foo == false # => true
foo == true # => false
然而
if foo then 'hi' end
# => 'hi'
我期待的是
if false then 'hi' end
# => nil
我期待foo
评估为false
,但事实并非如此。 if
如何评估foo
以及为什么不评估false
?
答案 0 :(得分:7)
Ruby中只有两个对象被认为是“假的”:false
(FalseClass
}和nil
(NilClass
)。您不能使另一个对象模仿其中一个,因为Ruby运行时会检查这两个具体实例。
在您的示例中,您有一个Foo
类的实例。它不是false
或nil
,因此被视为“真实”。没有办法让它评估为虚假价值。