1

从 Ruby 的一个在线资源中,我发现了以下语句:

特殊对象 nil 实际上是一个对象(它是一个名为 NilClass 的类的唯一实例)。但在实践中,它也是一种非对象。nil 的布尔值是假的,但这只是它的非对象性的开始。

虽然nil响应方法调用如下,就像其他对象一样,non-objectness作者试图说:

nil.to_s #=> ""
nil.to_i #=> 0
nil.object_id #=> 4
nil.inspect #=> "nil"

任何人都可以在这里帮助我理解哲学non-object-nessnil

4

1 回答 1

0

nil等价null于其他语言。通常,null不应将其视为合理的值。

然而——正如你可能注意到的——Ruby 语言的语法在对象上的方法调用上完成了所有事情,比 Python 做的事情要多得多。确定价值观的健全性是其中的一部分。

考虑以下示例

def foobar(arg)
  if arg < 1
    return nil
  else
    return "Oh, hi!"
  end
end

res = foobar(rand(2))
puts res unless res.nil?

nil?如您所见,在最后一行中,我通过调用方法来检查结果是否为零。这是一种最有效的方法,因为比较运算符可以重载并且可以做非常不同的事情。nil?仅当true值可以被视为nil(通常,如果值为 nil - 但nil?方法也是可重写的,即使它非常不鼓励。开发人员通常不会重写此方法)。

它的另一个有用属性nil是有一个to_s方法,所以你可以x = "#{nil}得到一个空字符串。

如果nil不是一个对象,您就不能调用nil?它或其他有用的函数,但是您可能会遇到像 Java 中的 NullPointerException 或像 C/C++ 中的分段错误。而且通常是没有意义的。

于 2013-03-10T07:06:32.590 回答