用Google搜索但未找到答案。
名称nil有什么特别之处吗?
nil的概念与其他语言中的null不同吗?
答案 0 :(得分:20)
嗯,“nil”是Lisp和Smalltalk†中“无”的具体概念的传统名称。单词“null”用作形容词,意思是“空”,如“空列表”,即nil。
同时,“null”传统上是C中的指针值,表示指针未指向任何有效的指针。它指的是指针为空的事实(与Lisp使用该词的意义相同),但它本身被认为是一个值。
Matz是Smalltalk和Lisp的粉丝,所以他选择了自己的术语。两个术语之间的含义并没有真正的重要区别 - 一个是C-ish。
†实际上,“nil”存在的语言多于那些语言。即使是C的伟大爷爷Algol-68也称它为“零”。我不确定C 是否发明“null”作为空引用的名称或者只是推广它,但我很确定使用该术语的所有现代语言都是从C中获得的。 / SUP>
答案 1 :(得分:6)
许多编程语言都可以表示缺少信息。有时您会看到null
,有时会看到nil
,而在Python中我们会看到None
。
nil
与null
和None
之间没有普遍的区别。有趣的是,不同语言使用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.
语言设计者可能会也可能不会决定在他们的语言中使用这种区别。尽管如此,我从未见过null
与nil
这样的内容。
答案 2 :(得分:2)
我是一名老派程序员。三十多年前我专业编程。很多编程都让我过去了。但我想指出一些尚未被提及的旧学校。
有一个名为null的ASCII字符。它的二进制值是00000000.它是一个实际的字符。我们曾经问过"空字符真的是空的吗?"。
我的建议,对我来说是一种改变,就是为null字符保留null,并在含义时使用nil" nothing"。
历史上:我们使用了一堆空值发送到某个地方,以便在发送数据时创建暂停。