2013-07-04 37 views
4

一等公民的定義在wiki article發現說:一等公民

一個目的是一流當它

  • 可以存儲在變量和數據結構
  • 可作爲參數傳遞給子程序
  • 可作爲子程序的結果返回
  • 可以在運行時構建
  • 有其內在的身份(獨立於任何給定的名字)

能有人請解釋/ 5號的要求精心設計的(粗體)?我覺得這篇文章應該提供更多的細節,因爲「內在身份」在什麼意義上被捕獲。

也許我們可以在我們的討論中使用Javascript中的函數和C中的函數來說明第5個項目符號。

我相信,在C函數是二等,而函數是在Javascript中一流的,因爲我們可以做這樣的事情在Javascript以下內容:

var foo = function() { console.log("Hello world"); }; 

,這是不是在C.

許可

再一次,我的問題是真的在第5個項目符號(要求)。

回答

6

在概念上,內在身份是非常簡單的。如果一件東西有它,它的身份不取決於那件事的外在事物。它可以被別名,引用,重命名,你擁有什麼,但它仍然保持「身份」的任何內容。人們(大多數人,無論如何)都有內在的身份。你是,不管你的名字是什麼,或者你住在哪裏,或者你在生活中可能遭受了什麼身體上的改變。

另一方面,電子沒有內在的身份。也許在這裏引入量子力學只是混淆了這個問題,但我認爲這是一個非常棒的例子。沒有辦法「標記」或「標記」一個電子,以便我們可以分辨它與鄰居之間的差異。如果將一個電子替換爲另一個電子,則絕對無法區分舊電子和新電子。

回到電腦:

{} === {} // false 

,但是這是真的:「內在一致性」可能值由Object#hashCode() in Java返回,或任何機構的JavaScript引擎使用,允許這種說法是錯誤的例子:

function foo() {} 
var bar = foo; 
var baz = bar; 
baz === foo; // true 
+0

首先,感謝您回答我的第一個問題在stackoverflow。因此,在C的情況下,所有東西都有內在的身份,並且它不需要任何額外的「機制」,因爲任何類型的對象都是內存尋址的(例如&對象)。 – nawK

+0

@nawK你會介意接受這個答案,如果它確實回答你的問題? :) –