文档章节

函数是第一类值和第二类值与回调函数

b
 buleberry
发布于 2014/03/13 16:33
字数 511
阅读 951
收藏 2

有些语言确实是不区分的,它的function(表示code)跟int, double的地位是一样的。这种语言就为函数是第一类值。

但问题是,有些语言是不能存储函数,不能动态创建函数,不能动态销毁函数。(这里函数是已经是广义的了,用来表示代码code)。只能存储一个指向函数的指针,这种语言称为函数是第二类值。


另外有些语言不单可以传递函数,函数里面又用到一些外部信息(包括code, data)。那些语言可以将函数跟函数所用到的信息一起传递存储。这种将函数和它所用的信息作为一个整体,就为闭包。


比如排序,A让B排序,B会做排序,但排序需要知道哪个比哪个大,这点B自己不知道,就需要A告诉它。而这种判断那个大,本身是一种动作,既然C语言中不可以传进第一值的函数,就设计成传递第二值的函数指针,这个函数指针就是A传向B的信息,用来表示一个行为。这里本来A调用B的,结果B又调用了A告诉它的信息,也就叫callback。


跟着再将回调的概念进化,比如某人同时关心A,B,C,D,E,F事件,并且这些事件是一组的,比如敲键盘,鼠标移动,鼠标点击等一组。将一组事件结合起来。在有些语言就变成一个接口,接口有N个函数。有些语言就映射成一个结构,里面放着N个函数指针。跟着就不是将单个函数指针传进去,而是将接口,或者函数指针的结构传进去。这些根据不同的用途,有些人叫它为代理啊,监听者啊,观察者啊等等。

© 著作权归作者所有

b
粉丝 1
博文 62
码字总数 33383
作品 0
南京
私信 提问
第一类对象(First-class Object)

In programming language design, a first-class citizen (also object, entity, or value) in a given programming language is an entity which supports all the operations generally av......

Barudisshu
2015/04/14
0
0
跟黄哥学python序列文章之python 函数是第一类对象

跟黄哥学python序列文章之python 函数是第一类对象 有人问python函数可以返回函数,php如何实现一样的功能 python 中函数是第一类对象,函数名字是函数对象的引用,函数名可以赋值给变量,可...

黄哥Python培训
2016/03/13
62
0
求解微分方程的边界条件(初值条件和Neumann条件)

在有限元仿真运算时,经常碰到的是对PDE方程的求解,常用的仿真软件如COMSOL、ANSYS、ABAQUS的均是对PDE方程的工具。要使求解PDE方程有确定的解,就需要引入一定的条件——定解条件,有时也被...

qq_41634276
2018/04/24
0
0
JavaScript模式 读书笔记三

第四章函数 函数是第一类对象 first-class object,可以作为带有属性和方法的值以及参数进行传递。 创建函数的语法 function foo(){}; //函数声明var bar=function(){}; //函数表达式var baz...

lilugirl
2016/02/01
126
0
线性规划模型建立

我们通过实例来引入线性规划模型。 第一类一般形式 例一:某军工厂生产甲、乙、丙三种产品,生产三 种产品需要A、B两种资源,其单位需求量及利润由下表1给出,问每天生产甲、乙、丙三种产品各...

忆臻
2017/11/28
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Redis缓存穿透、缓存雪崩和缓存击穿

Redis缓存穿透、缓存雪崩 缓存雪崩,是指在某一个时间段,缓存集中过期失效。 产生雪崩的原因之一,比如在写本文的时候,马上就要到双十二零点,很快就会迎来一波抢购,这波商品时间比较集中...

architect刘源源
16分钟前
1
1
ArrayList源码分析

一、核心变量 // 序列化ID private static final long serialVersionUID = 8683452581122892189L; // 默认初始化容量 private static final int DEFAULT_CAPACITY = 10; ......

星爵22
24分钟前
1
0
++a a++的再次理解

public class Test { //// public static void main(String[] args) throws InterruptedException { // TODO Auto-generated method stub int a=1; int b=2; int c; int d; c=......

南桥北木
25分钟前
0
0
整合Spring和SpringMVC

1.Spring容器和SpringMVC容器的关系 Spring容器是一个父容器,SpringMVC容器是一个子容器,它继承自Spring容器。因此,在SpringMVC容器中,可以访问到Spring容器中定义的Bean,而在Spring容器...

薛小二
25分钟前
0
0
递归实现后序遍历二叉树

问题描述 从键盘接受输入先序序列,以二叉链表作为存储结构,建立二叉树(以先序来建立)并对其进行后序遍历,然后将遍历结果打印输出。要求采用递归方法实现。 解题思路 递归实现 程序实现 ...

niithub
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部