Max*_*Ruf 4 lambda functional-programming
我真的很感兴趣如何使用lambda函数.在像php这样的现代高级编程语言中使用它们是否有意义?如果是,为什么?
这真的只是一个嵌入在函数中的函数(像这样)还是有更多的背后?
lambda术语表示函数作为值.它可以作为一个值传递(因为它是一个),然后通过给它一些参数来应用它.命名函数只是映射到lambda术语的名称,可以是常量或变量(取决于语言详细信息).
是的,它们在高级编程语言中非常普遍.例如,JavaScript中的所有函数实际上都是存储在变量中的lambda术语.
lambda函数是一个对象(或值).它可以作为参数传递给另一个函数,也可以从一个函数返回.
map(lambda x: x**2, [1,2,3,4])
Run Code Online (Sandbox Code Playgroud)
它不需要名字; 当你创建一个(例如在Python中)时lambda x: x**2
,你就有了lambda函数.与传统的对比:
def square(x):
return x**2
Run Code Online (Sandbox Code Playgroud)
也许最重要的是,您可以在运行时构造它们.
def make_exp_function(n):
return lambda x: x**n
square = make_exp_function(2)
cube = make_exp_function(3)
for i in range(100):
f = make_exp_function(i)
print f(2)
Run Code Online (Sandbox Code Playgroud)
小智 5
虽然PHP支持匿名函数,但它们实际上并不是闭包 - 所以你错过了最有趣的部分.
在JavaScript(以及支持"lambdas"正确方法的语言)中,您可以从函数返回一个函数,即使在外部函数执行完毕后,返回的函数也能够访问封闭的上下文.例:
function counter(start){
return function() {
return start++;
};
};
var f = counter(1);
alert( f() ); // now it's 1
alert( f() ); // now it's 2
alert( f() ); // now it's 3
var g = counter(10);
alert( g() ); // now it's 10
alert( g() ); // now it's 11
alert( f() ); // now it's 4!
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
424 次 |
最近记录: |