当前位置:  开发笔记 > 编程语言 > 正文

"头等对象"是什么意思?

如何解决《"头等对象"是什么意思?》经验,为你挑选了6个好方法。

在最近的一个问题中,我收到了一些建议,其中包括JavaScript的方面,其中函数是"第一类"对象.与其他对象相比,"第一类"在这种情况下意味着什么?

编辑(JörgWMittag):完全重复:"什么是一流的编程结构?"



1> Sander Versl..:

引用维基百科:

在计算机科学中,如果一种编程语言将函数视为一等对象,则它被称为支持一等函数(或函数文字).具体来说,这意味着该语言支持在程序执行期间构造新函数,将它们存储在数据结构中,将它们作为参数传递给其他函数,并将它们作为其他函数的值返回.

这个页面也很好地说明了它:

真的,就像任何其他变量一样

函数是Object类型的实例

函数可以具有属性,并具有返回其构造函数方法的链接

您可以将函数存储在变量中

您可以将该函数作为参数传递给另一个函数

您可以从函数返回该函数

还阅读了TrayMan的评论,有趣......


方便地,具有一级函数的语言也具有高阶函数,而不是局限于一阶函数,这将排除一流函数.(虽然更高级,但不是一流的.)
引用维基百科是好的和花花公子,但描述是用科学家而不是极客的语言编写的.这究竟是什么意思呢?该引言的最后一句是迷路.
我在维基百科的引文中找不到任何不清楚的内容,但附加链接非常好.
该链接不再起作用(约8年后).

2> Jörg W Mitta..:

编程语言中的"一流功能"的概念是由英国计算机科学家克里斯托弗·斯特拉奇在20世纪60年代引入的.这个原则最着名的表述可能是Gerald Jay Sussman和Harry Abelson 的计算机程序结构和解释:

它们可以用变量命名.

它们可以作为参数传递给程序.

它们可能会作为程序结果返回.

它们可能包含在数据结构中.

基本上,这意味着您可以使用编程语言中的所有其他元素完成所有功能.因此,对于JavaScript,它意味着您可以使用Integer,String,Array或任何其他类型的Object执行的所有操作,您可以使用函数.



3> Arman McHita..:

更完整地批准了Strachey-Sussman-Abelson的制定.因此,如果您的语言支持这样的构造,那么您将获得一个函数作为一流的语言:)

var men = function (objectOfAdmiration) {
  return objectOfAdmiration();
};
men.isSweetHeart = true;

var women = function (objectOfAdmiration) {
  return objectOfAdmiration();
};
women.isSweetHeart = true;

var aliens = function (objectOfAdmiration) {
  return objectOfAdmiration();
};

function like(obj){
  if (obj.isSweetHeart) {
      return function (){ return "Holy TRUE!"}; 
  }
  else {
      return function (){ return "Holy CRAP!"};
  }
}

alert("Men like women is " + men(like(women))); // -> "Holly TRUE!"
alert("Women like men is " + women(like(men))); // -> "Holly TRUE!"

alert("Men like aliens is " + men(like(aliens))); // -> "Holly CRAP!"
alert("Aliens like women is " + aliens(like(women))); // -> "Holly TRUE!" :)

//women(like(aliens)); //  Who knows? Life is sometimes so unpredictable... :)

简而言之,任何东西都是第一类对象,如果它在语言中作为状态操作类对象或对象类型.只需要您可以操作并传递语句并同时在表达式中进行评估.甚至更短:当你可以将一个函数视为可以另外调用的对象时.



4> 小智..:

JavaScript函数是第一类函数,意味着函数和对象被视为同一个东西.函数可以作为变量存储在对象或数组中,也可以作为参数传递或由其他函数返回.这使得函数"成为JavaScript中的一等公民"

JavaScript使用文字符号语法,这使得很难完全掌握JavaScript函数是对象的事实.

例如..

var youObj1 = new Object();
// or
var youObj1 = {};

这两个都是相同的.通过使用new我们调用Object的构造函数.另外,通过使用{}(称为文字的JavaScript快捷方式),我们调用了Object的构造函数.{}只是实例化构造函数的简短表示.

大多数语言使用new关键字来创建对象,因此我们创建一个JavaScript对象.

var myFunction = new Function("a",  "b", 'return a_b');

如您所见,我们创建了一个对象名称函数.

使用JavaScript函数表达式创建相同的对象名称函数

var myFunction = function myFunction(a,b) {
    return a+b;
}

我们在这里创建一个对象名称函数.



5> Sagar Munjal..:

在javascript函数中是第一类对象,因为它可以比对象可以做的更多.

函数是Object类型的实例.

Function instanceof Object //returns true

像对象一样,函数可以具有属性,并且可以具有返回其构造函数的链接.

 var o = {}; // empty object 'o'
    o.a = 1 ; 
    o.b = 2 ; 

    console.log(o.a); // 1
    console.log(o.b); // 2 


    function foo(){};
    foo.a = 3 ; 
    foo.b = 4 ; 

    console.log(foo.a);  // logs 3
    console.log(foo.b);  // logs 4 


6> Yuval Adam..:

简单的测试.如果您可以用您的语言(Python作为示例)执行此操作:

def double(x):
    return x*x

f = double

print f(5) #prints 25

您的语言将函数视为第一类对象.


但我可以用C++做到这一点:int two(int x){return x << 1; } int(*f)(int)=两次; 的std :: COUT <<(*F)(5)<<的std :: ENDL; 这是否意味着C++将函数视为第一类对象(使用有趣的语法)?
推荐阅读
保佑欣疼你的芯疼
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有