采访:什么是Lambdaexpression?

我最近有两次电话采访。

在两次采访中,我都被问到是定义一个Lambdaexpression式的最后一个问题。

我声称Lambdaexpression式是一个代表委托的无名方法。 但不知怎的,这还不够。

在电话采访中我很难解释这一点。

有谁知道更好?

Lambdaexpression式是作为常量值给出的无名函数。 它们可以出现在任何其他常量的任何地方,但通常被写为其他函数的参数。 典型的例子是,你将比较函数传递给一个通用的“sorting”例程,而不是定义一个完整的函数(并引起词汇不连续性和命名空间污染)来描述这个比较的麻烦,你可以传递一个描述比较的lambdaexpression式。

然而,这错过了Lambdaexpression式最重要的特征之一,就是它们在外观上执行。 因此,他们可以使用在该上下文中定义的variables的值。 这将function指针与真正的lambdaexpression式区分开来。 在支持可变variables的语言中,正确的lambdaexpression式提供了改变这些variables值的能力。

在所有的LISP,Perl,Python和C ++,Objective C,C#和Java 8的最新版本中,Lambdaexpression式都以不同的语法出现,但是在C语言中显然没有,尽pipe它有处理传递函数的方法他们的一些借口)作为参数。 它们是具有特定语义的语法元素,而这些语义对运行时的要求比C要求的要求更高。

lambdaexpression式是代码的无名悬置。

考虑这个匿名的“乘两件事”function(又名lambdaexpression式),使用一些非特定的符号。

λ(x, y) -> x * y 

你的回答对于你使用lambdaexpression式的地方(我猜C#?)是非常具体的,我怀疑这个采访者是在寻求一个更全面的理解。 代表的概念,C#的语言,以及方法的思想都是次要的lambda是什么,他们是如何工作的。 您可以在纸上使用lambdaexpression式进行计算,例如,不涉及任何方法。

也许他们只是想听到LINQ是“语言集成查询”。

话虽如此,如果他们真的想要解释“什么”LINQ是由,我可能会包括更多的信息,你提供的。 就像是:

LINQ或语言集成查询是一组在.NET 3.5中添加的语言添加和框架类,它们使查询操作更加有效。 它基于IEnumerable和IQueryable的扩展方法以及它们的通用对应方法,它们允许在LINQ to Objects中延迟执行,并通过IQueryable进行远程处理,以及许多其他function。 对C#和VB.NET也进行了语言更改,以便直接在语言中支持更“自然”的查询语法。

那么我说Linq是代表一个代表的一个无名的方法。

其实,这不是LINQ,而是一个“lambdaexpression式”。 从技术上讲,LINQ甚至不使用它们。

LINQ代表“语言集成查询”。 具体而言,它是“从… where … select”关键字(即, 集成到该语言中查询语法)。

现在,为了让这些关键字做的事情,更多的是被添加到语言(和CLR)(如lambdaexpression式,扩展方法,Enumerable类等)。

为了回答你的问题,你的答案其实很好。 我所做的唯一改变是强调“内联”一词。

Lambdaexpression式是一个未命名的方法,它被内联写入需要委托的地方。

你应该看看msdn中的Lambda Expression

他们可能在寻找你知道LINQ是查询IQueryableIEnumerable对象的新DSL。 本质上是“从…… where … select …”语法。 知道它在lambdas和function风格下实施可能会得到奖励点。