在
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会话并亲自尝试一下.看起来undef意味着object_id为6.
现在,undef确实是Ruby中的保留字,但它不是像nil,false和true这样的特殊对象,它是 – 正如我们所知 – 用于取消定义方法的关键字.
所以,要回答你的问题,没有undef对象,它没有类,你无法访问它. undef意味着服务的目的是由我们今天所知的Ruby中的nil对象提供服务.但是,它仍然留在代码中作为时代遗留下来的遗产,因为我们更好奇地发现和谜题.