Lambda函数

Max*_*Ruf 4 lambda functional-programming

我真的很感兴趣如何使用lambda函数.在像php这样的现代高级编程语言中使用它们是否有意义?如果是,为什么?

这真的只是一个嵌入在函数中的函数(像这样)还是有更多的背后?

Don*_*ows 7

lambda术语表示函数作为.它可以作为一个值传递(因为它是一个),然后通过给它一些参数来应用它.命名函数只是映射到lambda术语的名称,可以是常量或变量(取决于语言详细信息).

是的,它们在高级编程语言中非常普遍.例如,JavaScript中的所有函数实际上都是存储在变量中的lambda术语.


Edm*_*und 5

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)

  • 虽然默认情况下匿名函数不是闭包,但PHP确实支持显式闭包创建(使用关键字"use").有关详情,请访问http://blog.igstan.ro/2009/04/lambdas-and-closures-in-php-53.html (3认同)