Ruby “如何解释对象?”;如果;
假设我有以下几点:Ruby “如何解释对象?”;如果;,ruby,Ruby,假设我有以下几点: 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'
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
?Ruby中只有两个对象被认为是“falsy”:false
(属于false类
)和nil
(属于NilClass
)。您不能让另一个对象模仿其中一个,因为Ruby运行时会检查这两个具体实例
在您的示例中,有一个
Foo
类的实例。它不是false
或nil
,因此被认为是“真实的”。无法将其评估为falsy值。再说一遍,塞尔吉奥是第一个提供了一个很好答案的人。让我补充一下。不过,我必须说,我反对nil
是虚假的。我认为Ruby中的thadnil
对于正确实现的空对象模式来说是一个蹩脚的代词。但现在纠正已经太迟了。@BorisStitnicky:你可以用ruby:)现在不行,我正忙着用ruby重写SBML。我很满意