在给定的编程语言中,什么时候对象或其他东西被称为“一流”,为什么?它们与非它们的语言有何不同?
当人们说“一切都是对象”(就像在 Python 中)时,他们真的意味着“一切都是一流的”吗?
简而言之,这意味着该对象的使用没有任何限制。它是一样的
任何其他对象。
第一类对象是一个实体,可以动态创建、销毁、传递给函数、作为值返回,并拥有编程语言中其他变量所拥有的所有权限。
根据语言的不同,这可以
意味着:
- 可表达为匿名文字值
- 可存储在变量中
- 可存储在数据结构中
- 具有内在身份(独立于任何给定的名称)
- 与其他实体具有同等可比性
- 可作为过程/函数的参数传递
- 可作为过程/函数的结果返回
- 在运行时可构造
- 可打印
- 具有可读性
- 可在分布式进程之间传输
- 可在运行进程之外存储
Source http://en.wikipedia.org/wiki/First-class_object.
然而,在 C++ 中,函数本身并不是第一类对象:
- 您可以重写“()”运算符,从而可以拥有一流的对象函数。
- 函数指针是一流的。
- boost bind、lambda 和 function 确实提供了一流的函数
在 C++ 中,类不是第一类对象,而是这些类的实例。在Python中,两个类and这些对象是第一类对象。 (看这个答案 https://stackoverflow.com/a/6581949/1612701有关作为对象的类的更多详细信息)。
下面是 Javascript 一等函数的示例:
// f: function that takes a number and returns a number
// deltaX: small positive number
// returns a function that is an approximate derivative of f
function makeDerivative( f, deltaX )
{
var deriv = function(x)
{
return ( f(x + deltaX) - f(x) )/ deltaX;
}
return deriv;
}
var cos = makeDerivative( Math.sin, 0.000001);
// cos(0) ~> 1
// cos(pi/2) ~> 0
Source http://en.wikipedia.org/wiki/First-class_function.
不是第一类对象的实体被称为第二类对象。 C++ 中的函数是二等函数,因为它们不能动态创建。
关于编辑:
编辑。当一个人说“一切都是
一个对象”(就像在Python中一样),他是吗?
确实意味着“一切都是
一流”?
术语“对象”可以宽松地使用,并不意味着是一流的。将整个概念称为“一流实体”可能更有意义。但在 Python 中,他们的目标是让一切都成为一流。我相信发表声明的人的意图是一流的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)