为什么Ruby使用nil命名空对象?
谷歌搜索但没有找到答案。
名称为nil有什么特别之处吗?
nil的概念与其他语言中的null不同吗?
好吧,“nil”是Lisp和Smalltalk†中“无”的具体概念的传统名称。 单词“null”用作形容词,意思是“空”,如“空列表”,即nil。
同时,“null”传统上是C中的指针值,表示指针不指向任何有效的指针。 它指的是指针为空的事实(与Lisp使用该词的意义相同),但它本身被认为是一个值。
Matz是Smalltalk和Lisp的粉丝,所以他选择了他们的术语。 两个术语之间的意义并没有真正的重要区别 – 一个是C-ish。
†实际上,“nil”存在的语言多于那些语言。 即使是C的伟大爷爷Algol-68也称它为“零”。 我不确定C是否发明了 “null”作为空引用的名称或者只是推广它,但我很确定使用该术语的所有现代语言都是从C语言中获得的。
许多编程语言都有一种表示缺少信息的方法。 有时你会看到null
,有时候, nil
,而在Python中我们看到None
。
nil
和null
以及None
之间没有普遍的区别。 有趣的是,不同语言使用null
的方式存在差异,例如:在某些语言中,它只能用于指针上下文; 有时它是一个关键词; 有时它只是一个标识符; 有时它是原始的; 有时它是一个对象。
但没有任何东西可以说你必须使用nil
来表示这一点而null
表示这意味着。
这个词的选择意味着什么,取决于语言设计师。 Matsumoto首选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.
语言设计者可能会也可能不会决定在他们的语言中使用这种区别。 不过,我从来没有见过null
和nil
这样的东西。
我是一名老派程序员。 三十多年前我专业编程。 很多编程都让我过去了。 但我想指出一些尚未提及的旧学校。
有一个名为null的ASCII字符。 它的二进制值是00000000.它是一个实际的字符。 我们曾经问过“空字符真的是空吗?”。
我的建议,对我来说是一种改变,就是为空字符保留单词null,并在表示“无”时使用nil。
历史上:我们使用一堆空值发送到某个地方,以便在发送数据时创建暂停。
- 未定义的方法’click’为nil:NilClass(Mechanize)
- 恢复Ruby中的文件下载,范围标题问题
- Rails 3.1:如何仅为Web应用程序运行初始化程序(rails server / unicorn / etc)
- 由于错误,无法创建rails应用程序
- 将设计sign_in表单设置为Twitter Bootstrap Modal
- Ruby on Rails Win7 x64?
- 为什么在运行bundle install时,所有具有本机扩展的gem都无法安装?
- Web应用程序无法启动乘客错误(Apache2) – 引用不存在的Ruby补丁
- 将Ruby 1.9.2与RubyMine和Matrix结合使用