有人可以很好地描述 Lambda 是什么吗?我们为它们提供了一个标签,它们在 C# 问题的秘密上,但我还没有找到一个很好的定义和解释它们是什么。
7 回答
闭包、lambdas 和匿名函数不一定是同一回事。
匿名函数是没有(或至少不需要)自己的名称的任何函数。
闭包是一个函数,它可以访问在声明时处于其词法范围内的变量,即使它们已经超出范围。匿名函数不一定必须是闭包,但它们在大多数语言中都存在,并且当它们不是时变得相当不有用。
就计算机科学而言,lambda 的定义并不十分明确。许多语言甚至不使用该术语。相反,他们只会称它们为闭包或匿名函数或发明自己的术语。在 LISP 中,lambda 只是一个匿名函数。在 Python 中,lambda 是一个匿名函数,专门限于单个表达式;还有什么,你需要一个命名函数。Lambda 是两种语言的闭包。
也称为闭包或匿名函数。我在这里找到了最好的描述。基本上,可以作为参数传递给函数的内联代码块。
它只是一个内联声明的匿名函数,通常在您不想编写完整的函数时分配给委托。
在像 lisp/scheme 这样的语言中,它们通常作为函数参数被自由地传递,但 C# 中的习惯用法通常会发现 lambdas 仅用于函数的惰性求值,如在 linq 中,或者用于使事件处理代码更简洁。
编程中并没有真正的“lambda”之类的东西。这取决于语言等。
简而言之,通常“具有 lambdas”的语言使用匿名函数这个术语,或者在某些情况下,使用闭包。就像这样,在 Ruby 中:
f = lambda { return "this is a function with no name" }
puts f.call
回应前面的答案:
-关于匿名函数的重要之处不是它们不需要名称。
-闭包是一个单独的概念。
- 一篇巨大的维基百科文章并没有让这一点变得更清楚。
这是我的回答分三部分:
1. lambda 是一个函数,也是一个表达式。这是重要的事情。
2. 许多实现所谓的“lambdas”的语言添加了一些语法糖以使编写这些短函数更容易和更快,但这不是必需的。
3. 某些语言可能要求 lambda没有副作用。从功能意义上讲,那将是一个更纯粹的 lambda。
当函数是表达式时,它是语言中的“一等公民”。我可以用它做所有重要的事情:
x = lambda(){ return "Hello World"; }
doit( 1, 2, lambda(a,b){ return a > b; }, 3 )
x = (lambda(a){ return a+1; }) + 5 // type error, not syntax error
(lambda(a,b){ print(a); log(b); })( 1, 2 ) // () is valid operator here
摘自维基百科:http ://en.wikipedia.org/wiki/Lambda#Lambda.2C_the_word
在 Lisp 和 Python 等编程语言中,lambda 是一个运算符,用于表示匿名函数或闭包,遵循 lambda 演算用法。