![]() |
1
142
简而言之,这意味着对对象的使用没有限制。它和 任何其他物体。 第一类对象是可以动态创建、销毁、传递给函数、作为值返回并具有编程语言中其他变量所具有的所有权限的实体。
Source . 在C++中,函数本身不是第一类对象,但是:
在C++中,类不是第一类对象,但这些类的实例是。在python中,两个类 和 这些对象是第一类对象。(见 this answer 有关类作为对象的详细信息)。 下面是一个javascript一级函数的示例:
Source . 不是第一类对象的实体称为第二类对象。C++中的函数是第二类,因为它们不能动态创建。 关于编辑:
“对象”一词可以随意使用,并不意味着它是一流的。把整个概念称为“第一类实体”可能更有意义。但在python中,它们的目标是使一切都成为一流的。我相信做你陈述的人的意图是一流的。 |
![]() |
2
18
_头等舱_意味着您可以按常规方式操作它们。大多数时候,这仅仅意味着你可以把这些一级公民作为函数的参数传递,或者从函数中返回。 对于对象来说,这是不言而喻的,但对于函数甚至类来说,这并不总是那么明显:
这是C中的一个例子,其中函数实际上
不是
一流的对象。因此,上面的代码使用一个小的变通方法(即调用
|
![]() |
3
17
从幻灯片中 Structure and Interpretation of Computer Programs ,第2A讲(1986),依次引用 Christopher Stracey : 一等公民的权利和特权:
|
![]() |
4
16
当一个人说“一切都是一个对象”(就像在Python中一样)时,他真的是说“一切都是一流的”吗? 对。 Python中的所有内容都是适当的对象。即使是其他语言中的“原始类型”。
你发现一个物体
因为在Python中,一切都是一流的对象,所以很少有不明确的特殊情况。 例如,在Java中,有原始类型(int、bOL、双、char),它们不是适当的对象。这就是为什么Java必须将整数、布尔、双和字符引入第一类的原因。对于初学者来说,这可能很难教——不清楚为什么原始类型和类必须并排存在。 它还意味着一个对象的类本身就是一个对象。这与C++不同,其中类在运行时并不总是有明显的存在。
类型
内置类型的类型
|
![]() |
5
2
在我看来,这是用自然语言描述事物的隐喻之一。这个术语基本上是在将函数描述为第一类对象的上下文中使用的。 如果考虑面向对象语言,我们可以将各种特性赋予对象,例如继承、类定义、传递到代码的其他部分(方法参数)的能力、存储在数据结构中的能力等。如果我们可以用一个通常不被视为对象的实体来做同样的事情,比如Java SCR中的函数。IPT,这些实体被认为是第一类对象。 这里的第一类基本上是指,不作为第二类处理(具有降级行为)。从本质上讲,嘲弄是完美的或难以区分的。 |
![]() |
John V · 是否存在单元测试无法发现的逻辑/流错误类型? 6 年前 |
![]() |
Beefster · 为什么ANSI颜色转义以“m”而不是“]”结尾? 7 年前 |
![]() |
Guillermo Gutiérrez · STR转换是如何工作的? 7 年前 |
![]() |
RudziankoÅ · 合并排序数组算法 7 年前 |
|
user8852560 · 构造函数中的验证和构造函数冲突 7 年前 |
![]() |
jav974 · 订购产品时寻找最佳价格组合的算法 7 年前 |
![]() |
hippietrail · 确定浮点数中前导零的数量 7 年前 |