一等公民的定义见wiki article说:
An object is first-class when it
有人可以解释/详细说明第 5 个要求(粗体)吗?我觉得这篇文章应该提供更多的细节,比如“内在身份”在什么意义上被捕获。
也许我们可以在讨论中使用 Javascript 中的函数和 C 中的函数来说明第 5 个项目符号。
我相信 C 中的函数是二等的,而 Javascript 中的函数是一等的,因为我们可以在 Javascript 中执行以下操作:
var foo = function () { console.log("Hello world"); };
,这在 C 中是不允许的。同样,我的问题确实在第 5 个项目符号(要求)上。
最佳答案
从概念上讲,内在身份非常简单。如果一个事物拥有它,它的身份不取决于该事物的外部事物。它可以被别名、引用、重命名、你有什么,但它仍然保持“身份”是什么。人们(无论如何,他们中的大多数)都有内在的身份认同。你就是你,无论你叫什么名字,或者你住在哪里,或者你在生活中可能遭受过什么样的 body 变化。
另一方面,电子没有内在身份。也许在这里引入量子力学只会混淆这个问题,但我认为这是一个非常棒的例子。没有办法“标记”或“标记”一个电子,以便我们可以区分它和邻居之间的区别。如果将一个电子替换为另一个电子,则绝对无法区分新旧电子。
回到计算机:“内在身份”的一个例子可能是 Object#hashCode()
in Java 返回的值, 或者 JavaScript 引擎使用的任何允许此语句为假的机制:
{} === {} // false
但这是真的:
function foo () {}
var bar = foo;
var baz = bar;
baz === foo; // true
关于一等公民,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17461003/