Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby “如何解释对象?”;如果;_Ruby - Fatal编程技术网

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中的thad
nil
对于正确实现的空对象模式来说是一个蹩脚的代词。但现在纠正已经太迟了。@BorisStitnicky:你可以用ruby:)现在不行,我正忙着用ruby重写SBML。我很满意