2014-03-01 27 views
10

谷歌搜索,但沒有找到答案。爲什麼Ruby使用nil來命名空對象?

有沒有什麼特別的名字零?

是否與其他語言中的null不同的概念?

+1

無意味着沒有/不存在。詢問Matz。這並沒有什麼不同。 –

+2

只是猜測:Ruby非常類似lisp,'nil'是lisp中的一個值。許多口語方言和帕斯卡已經出現很長時間了。相比之下,'null'可能是「更新的想法」。 – Gene

回答

14

那麼,「無」是Lisp和Smalltalk†中「無」的具體概念的傳統名稱。單詞「null」被用作形容詞意思「空」,如在「空列表」中,這是零。

同時,「空」傳統上是C中的指針值,表示指針不指向任何有效的指針。它指的是指針爲空(就像Lisp使用這個詞一樣),但它被認爲是一種價值。

Matz是Smalltalk和Lisp的粉絲,所以他用他們的術語。這兩個術語在意義上並沒有真正的重要差別 - 一個就是C-ish。

實際上,「無」存在於更多的語言,而不僅僅是那些。即使是C的曾祖父Algol-68也稱它爲「零」。我不知道如果C 發明「零」作爲名字的空引用或只是推廣它,但我敢肯定,所有使用該術語的現代語言得到了它從C

3

許多編程語言有一種方法來表示缺少信息。有時你會看到null,有時候,nil,在Python中我們有None

nilnullNone之間沒有統一的區別。有趣的是,不同語言在使用方式上存在差異,例如:在某些語言中,它只能用在指針上下文中;有時它是一個關鍵字;有時它只是一個標識符;有時它是一種原始的;有時它是一個對象。

但沒有什麼說你必須使用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. 

語言設計者可能會或可能不會決定在他們的語言使用這種區別。儘管如此,我從來沒有見過類似nullnil之類的東西。

1

我是一位老學校的程序員。我在30多年前專業編程。很多編程已經通過了我。但我想指出一些沒有提到的老派。

有一個名爲null的ASCII字符。它的二進制值是00000000.它是一個實際的字符。我們曾經問過「空字符是否爲空?」。

我的建議,對我來說是一個改變的想法,就是爲空字符保留單詞null,並在意義「無」時使用nil。

從歷史上看:我們使用向一些地方發送一串空值來在發送數據時創建一個暫停。

相關問題