9

维基文章中对一等公民的定义说:

一个对象是一流的,当它

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

有人可以解释/详细说明第 5 个要求(粗体)吗?我觉得这篇文章应该提供更多细节,比如“内在身份”在什么意义上捕捉。

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

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

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

,这在 C 中是不允许的。

同样,我的问题实际上是第 5 个项目符号(要求)。

4

1 回答 1

10

从概念上讲,内在身份非常简单。如果一个东西有它,它的身份不依赖于那个东西之外的东西。它可以是别名、引用、重命名、你有什么,但它仍然保持“身份”是什么。人们(无论如何,大多数人)都有内在的身份。你就是,无论你叫什么名字,无论你住在哪里,或者你在生活中可能经历过什么样的身体转变。

另一方面,电子没有内在的身份。也许在这里引入量子力学只会混淆这个问题,但我认为这是一个非常棒的例子。没有办法“标记”或“标记”一个电子,这样我们就可以分辨出它和邻居之间的区别。如果将一个电子替换为另一个,则绝对无法区分旧电子和新电子。

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

{} === {} // false

但这是真的:

function foo () {}
var bar = foo;
var baz = bar;
baz === foo; // true
于 2013-07-04T02:32:37.030 回答