一流的公民

时间:2013-07-04 02:29:46

标签: first-class

wiki article中找到的头等公民的定义是:

  

对象是

时的第一类
  • 可以存储在变量和数据结构中
  • 可以作为参数传递给子程序
  • 可以作为子程序的结果返回
  • 可以在运行时构建
  • 具有内在身份(独立于任何指定名称)

有人可以解释/详细说明第5项要求(粗体)吗?我认为这篇文章应该提供更多细节,因为“内在身份”正在捕捉到什么意义。

也许我们可以在我们的讨论中使用Javascript中的函数和C中的函数来说明第5个子弹。

我相信C中的函数是二等的,而函数在Javascript中是一流的,因为我们可以在Javascript中执行以下操作:

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

,这在C中是不允许的。

同样,我的问题实际上是在第5个子弹(要求)。

1 个答案:

答案 0 :(得分:8)

从概念上讲,内在身份非常简单。如果一件东西拥有它,它的身份不依赖于该东西外部的东西。它可以是别名,引用,重命名,有什么你,但它仍然保持“身份”的任何东西。人们(大多数人,无论如何)都有内在的身份。你是,不管你的名字是什么,你住在哪里,或者你在生活中可能遭受的身体转变。

另一方面,电子没有内在的同一性。也许在这里引入量子力学只是混淆了这个问题,但我认为这是一个非常奇妙的例子。没有办法“标记”或“标记”电子,以便我们可以区分它和邻居。如果用一个电子替换另一个电子,绝对没有办法区分旧电子和新电子。

回到计算机:“内在身份”的示例可能是Object#hashCode() in Java返回的值,或者JavaScript引擎使用的任何允许此语句为假的机制:

{} === {} // false

但这是真的:

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