[编程语言] 知识拾遗
1.lambda表达式
源自于数学中的lambda演算,对应编程语言级别的lambda抽象,一般的作用是快速声明一个匿名函数,作为注册回调、函数句柄等使用。
lambda表达式在主流语言中都存在。例如C++、Java、C#、Python。
1)C++
ISO C++ 11之后加入了lambda表达式。以给STL模板sort函数传入自定义compare函数为例:
sort(array.begin(), array.end(), [](int a,int b){return a>b;});
可以将lambda函数绑定在变量名上,作为函数别名。
audo f=[](int a, int b){return a>b;};
lambda变量捕获列表
lambda表达式的[]可以用来说明需要捕获哪些参数。
如下例,lambda捕获了全局变量a和函数局域变量b。
int a=1; int main(){ int b=2; auto f=[&](){cout<<a<<endl<<b<<endl;}; f(); return 0; }
此外,ISO C++ 14之后加入了lambda中参数自动推导。
2)Java
主要作用是定义需要用到的简单方法接口。注意与Java的匿名方法不同。
Java的匿名方法是对接口的实现或者对父类的继承。
语法格式如下:
(parameters) -> expression
(parameters) ->{ statements; }
例如:
// 接收一个参数(数字类型),返回其2倍的值 x -> 2 * x // 接受2个参数(数字),并返回他们的差值 (x, y) -> x – y
2.闭包
通常情况下闭包功能由lambda表达式实现。
闭包的意义在于函数获取到本不属于自己作用域的“自由变量”。例如C++ lambda的捕获列表可以向lambda表达式中传入局部变量。
闭包看起来就是将这些被传入的变量和函数重新打包使用并进行变量约束。
浙公网安备 33010602011771号