为什么Ruby使用nil命名空对象?

B S*_*ven 17 ruby

谷歌搜索但没有找到答案.

这个名字有什么特别之处吗?

nil的概念与其他语言中的null不同吗?

Chu*_*uck 23

好吧,"nil"是Lisp和Smalltalk†中"无所谓"的具体概念的传统名称.单词"null"用作形容词,意思是"空",如"空列表",即nil.

同时,"null"传统上是C中的指针值,表示指针不指向任何有效的指针.它指的是指针为空的事实(与Lisp使用该词的意义相同),但它本身被认为是一个值.

Matz是Smalltalk和Lisp的粉丝,所以他选择了他们的术语.两个术语之间的意义并没有真正的重要区别 - 一个是C-ish.

实际上,"nil"存在的语言多于那些语言.即使是C的伟大爷爷Algol-68也称它为"零".我不确定C是否发明了 "null"作为空引用的名称或者只是推广它,但我很确定使用该术语的所有现代语言都是从C语言中获得的.


Ray*_*oal 6

许多编程语言都有办法表示缺少信息.有时你会看到null,有时候,nil我们会看到Python None.

之间不存在普遍的差异nilnullNone.有趣的是,不同语言使用的方式存在差异null,例如:在某些语言中,它只能用于指针上下文; 有时它是一个关键词; 有时它只是一个标识符; 有时它是原始的; 有时它是一个对象.

但没有任何东西可以说你必须用它nil来表示这一点并且null意味着这一点.

选择这个词意味着什么,取决于语言设计师.松本首选nil; 就这些.

FWIW,有些语言更进一步,将无关概念与我不关心的概念区分开来.这里想到了JavaScript:

var supervisor = null;       // I definitely do NOT have a supervisor.

var supervisor = undefined;  // I may or may not have supervisor.  I may or may not
                             // even know if I do.  Or it is not relevant.  Or it is
                             // none of your business.
Run Code Online (Sandbox Code Playgroud)

语言设计者可能会也可能不会决定在他们的语言中使用这种区别.我从来没有见过这样的任何东西null对比nil,虽然.


小智 5

我是一名老派程序员。我三十多年前就开始专业编程了。我已经错过了很多编程。但我想指出一些没有提到的老派观点。

有一个 ASCII 字符称为 null。它的二进制值为00000000。它是一个实际的字符。我们曾经问“空字符真的是空吗?”。

我的建议(这对我来说是一个想法的改变)是为 null 字符保留 null 一词,并在表示“无”时使用 nil。

历史上:我们使用向某个地方发送一堆空值来在发送数据时创建暂停。