如何用“if”解释对象

时间:2013-06-25 11:28:07

标签: 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'

我期待的是

if false then 'hi' end
# => nil

我期待foo评估为false,但事实并非如此。 if如何评估foo以及为什么不评估false

1 个答案:

答案 0 :(得分:7)

Ruby中只有两个对象被认为是“假的”:falseFalseClass}和nilNilClass)。您不能使另一个对象模仿其中一个,因为Ruby运行时会检查这两个具体实例。

在您的示例中,您有一个Foo类的实例。它不是falsenil,因此被视为“真实”。没有办法让它评估为虚假价值。