我非常感兴趣了解lambda函数的使用。在像php这样的现代高级编程语言中使用它们是否有意义?如果是,为什么呢?
这真的只是一个嵌套在函数内部的函数(就像这个)还是背后有更多东西?
这真的只是一个嵌套在函数内部的函数(就像这个)还是背后有更多东西?
一个 lambda 表达式表示一个函数作为一个值。它可以像一个值一样被传递(因为它就是一个值),但是通过给它一些参数来应用它。命名函数只是映射到 lambda 表达式的名称,无论是常量还是变量(取决于语言细节)。
而且,在高级编程语言中它们非常普遍。例如,在 JavaScript 中所有的函数实际上都是存储在变量中的 lambda 表达式。
map(lambda x: x**2, [1,2,3,4])
lambda x:x ** 2
创建一个时,你就有了lambda函数。与传统方法相比,这是一个对比:def square(x):
return x**2
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)
虽然PHP支持匿名函数,但它们实际上并不是闭包--因此你会错过最有趣的部分。
在JavaScript(以及支持“lambda”的语言)中,您可以从函数返回一个函数,并且返回的函数将能够访问封闭的上下文,即使外部函数已经执行完毕。例如:
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!
filter
函数:def filter(array, &lambda_function)
new_array = []
for item in array
new_array.push(item) if lambda_function[item]
end
return new_array
end
$people_array = #imagine I have an array of Person objects here
def find_people_richer_than(threshold)
return filter($people_array) {|person| person.wealth >= threshold}
end
我们的filter
不知道我们将用什么标准进行过滤。这个逻辑都包含在我们传入的块(Ruby版本的lambda函数)中。但请注意,即使lambda函数实际上是在filter
内部调用的,它仍然可以从定义它的地方知道阈值。
Button1_Click += (sender, eventArgs) => { //myCode };
但是你将无法重用该事件,如果其中有很多代码,它也不能帮助保持代码的透明度。