在MRI implementation of gc.c我看到一个名为 undef
的对象。 undef
对象是什么?它的类别是什么?我怎样才能访问它?有什么用处吗?
最佳答案
这是我的一个有根据的猜测,也许 Matz 会在某个时候看到这个问题并给我们一个明确的答案,希望这会同时完成。
您可能知道,ruby 至少在早期受到了 perl 的影响(这就是为什么我们有 $@ 和 $_ 等变量)。 Perl 有一个 undef
关键字/函数(例如,如果您在没有初始化的情况下声明一个变量 - 它的值是未定义的)。我会说,在过去的某个时候,Ruby 也意味着有类似的东西(即变量可以有一个未定义的值)。我们怎么知道呢?根据发现它的上下文。
如您所见,该注释描述了各种 Ruby 对象的 object_id
是如何派生的。可以找到一些详细信息 here .但是,本质上我们知道以下内容:
false.object_id == 0
true.object_id == 2
nil.object_id == 4
这就是评论所暗示的,事实确实如此,您可以打开一个 irb
session 并亲自尝试一下。看起来 undef
应该有一个 6 的 object_id
。
现在,undef
确实是Ruby中的保留字,但它不是nil
、false
和那样的特殊对象true
,正如我们所知,它是用于取消定义方法的关键字。
所以,要回答你的问题,没有 undef
对象,它没有类,你无法访问它。 undef
的目的是由我们今天所知的 Ruby 中的 nil
对象来实现的。但是,它作为过去时代的遗产保留在代码中,供我们更好奇的人去寻找和思考。
关于ruby - Ruby 的 "undef"对象是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6975266/