ruby - Ruby 的 "undef"对象是什么?

标签 ruby core

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中的保留字,但它不是nilfalse那样的特殊对象true,正如我们所知,它是用于取消定义方法的关键字。

所以,要回答你的问题,没有 undef 对象,它没有类,你无法访问它。 undef 的目的是由我们今天所知的 Ruby 中的 nil 对象来实现的。但是,它作为过去时代的遗产保留在代码中,供我们更好奇的人去寻找和思考。

关于ruby - Ruby 的 "undef"对象是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6975266/

相关文章:

ruby - 用 Ruby 编写一个简单的网络服务器

ruby-on-rails - 添加订单详细信息 Microsoft Dynamics CRM Online API

ruby-on-rails - Ruby on Rails 高级 JSON 序列化

vue.js - 没有 typescript 的 dotnet 核心 (vuejs)

algorithm - 理解扫雷程序编程问题

java - while 循环问题

linux - 如何将核心文件 TEXT 页转储为反汇编文本文件?

ruby-on-rails - 服务器不会开始使用 authlogic-oauth2

ruby - "base.send :include, InstanceMethods"---> 这是做什么的?

c++ - 在专业领域库中使用 Qt?