我最近接受了两次电话采访。
在两次采访中,我都被问到定义Lambda表达式的最后一个问题。
我声称Lambda表达式是一个未命名的方法来代替委托。 但不知何故,这还不够。
我发现很难在电话采访中解释这一点。
有谁知道更好吗?
答案 0 :(得分:37)
Lambda表达式是作为常量值给出的无名函数。它们可以出现在任何其他常量可能的任何位置,但通常作为参数写入其他函数。规范的例子是你将比较函数传递给通用的“排序”例程,而不是去定义整个函数(并引起词汇不连续性和名称空间污染)来描述这种比较,你可以传递描述比较的lambda表达式。
然而,这错过了Lambda Expressions最重要的功能之一,即它们在外观的上下文中执行。因此,他们可以使用在该上下文中定义的变量的值。这将函数指针与真正的lambda表达式区分开来。在支持可变变量的语言中,正确的lambda表达式提供了更改这些变量值的能力。
Lambda表达式在所有LISP,Perl,Python和C ++,Objective C,C#和Java 8的最新版本中出现(具有不同的语法),但特别是在C语言中,即使它有办法处理传递作为参数的函数(或一些借口)。它们是具有特定语义的语法元素,并且这些语义对运行时的要求比C设计要求的要多。
答案 1 :(得分:17)
lambda表达式是无名的代码暂停。
使用一些非特定的符号来考虑这个匿名的“乘以两件事”函数(a.k.a. lambda表达式)。
λ(x, y) -> x * y
你的回答非常具体到你使用lambdas的地方(我猜C#?),我怀疑面试官要求更一般的理解。委托的概念,语言C#和方法的概念都是次要的lambda是什么以及它们是如何工作的。例如,您可以使用lambda表达式on paper进行计算,不涉及任何方法。
答案 2 :(得分:1)
也许他们只是想听听LINQ是“语言集成查询”。
话虽如此,如果他们真的想要解释LINQ所包含的“内容”,我可能会包含您提供的更多信息。类似的东西:
LINQ或语言集成查询是.NET 3.5中添加的一组语言添加和框架类,它们为查询操作提供了更多功能的方法。它基于IEnumerable和IQueryable的扩展方法及其通用对应物,允许在LINQ to Objects中进行延迟执行,并通过IQueryable进行远程处理,以及许多其他功能。还对C#和VB.NET进行了语言更改,以直接在该语言中支持更“自然”的查询语法。
答案 3 :(得分:1)
嗯,我说Linq是一个未命名的方法来取代委托。
实际上,这根本不是LINQ,而是“lambda表达”。从技术上讲,LINQ甚至不使用它们。
LINQ代表“语言集成查询”。具体来说,它是“from ... where .. select”关键字(即查询语法集成到语言)
现在,为了让这些关键字做事,语言(和CLR)中添加了更多的内容(例如lambdas,扩展方法,Enumerable类等)。
答案 4 :(得分:1)
要回答你修改过的问题,你的回答实际上是好的。我所做的唯一改变是强调“内联”这个词。
Lambda表达式是一个未命名的方法,它在内部写入需要委托的位置。
答案 5 :(得分:1)
你应该在msdn
中查看Lambda Expression答案 6 :(得分:0)
他们可能正在寻找您,知道LINQ是用于查询IQueryable
和IEnumerable
对象的新DSL。基本上,“from ... where ... select ...”语法。知道它是用lambdas和功能风格实现的,可能会给你带来奖励积分。