最近我进行了两次电话面试。
在这两次面试中,我的最后一个问题都被要求定义Lambda表达式。
我说Lambda表达式是一种代替委托的未命名方法。但不知何故,这似乎还不够。
我发现在电话面试中很难准确地解释这个问题。
有没有人更清楚呢?
最近我进行了两次电话面试。
在这两次面试中,我的最后一个问题都被要求定义Lambda表达式。
我说Lambda表达式是一种代替委托的未命名方法。但不知何故,这似乎还不够。
我发现在电话面试中很难准确地解释这个问题。
有没有人更清楚呢?
Lambda表达式是作为常量值给出的无名函数。它们可以出现在任何其他常量可能出现的地方,但通常被编写为某个其他函数的参数。一个典型的例子是,您将向通用的“排序”程序传递一个比较函数,而不需要定义整个函数(并遭受词法不连续性和名称空间污染),以描述这个比较,您可以只需传递描述比较的lambda表达式。
然而,这种方法忽略了Lambda表达式最重要的特点之一,即它们在其出现的上下文中执行。因此,它们可以使用在该上下文中定义的变量的值。这将函数指针与真正的Lambda表达式区分开来。在支持可变变量的语言中,正确的Lambda表达式提供了改变这些变量的值的能力。
Lambda表达式在所有LISP、Perl、Python和足够新的C++、Objective C、C#和Java 8中都会出现(具有不同的语法形式),但尤其要注意的是,即使C也有处理将函数(或一些借口)作为参数传递的方法,它没有Lambda表达式。它们是具有特定语义的语法元素,这些语义对运行时的要求比C语言设计的要求更高。
lambda表达式是一段无名的暂停代码。
考虑这个匿名的“两个数相乘”的函数(也称为lambda表达式),使用一些非常不具体的符号。
λ(x, y) -> x * y
你的回答非常专注于使用lambda表达式的特定场景(我猜测是C#?),而我怀疑面试官想要更一般性的理解。委托的概念、语言C#和方法的想法都不如了解什么是lambda以及它们是如何工作的来得重要。例如,你可以在纸上使用lambda表达式进行计算,而无需涉及任何方法。
回答您修改后的问题,对于这个问题,您的答案实际上很好。唯一需要改变的是要强调“inline”这个词。
Lambda表达式是一种未命名的方法,可以在需要委托的地方内联编写。
也许他们只是想听到LINQ是“语言集成查询”的意思。
话虽如此,如果他们真的想要一个关于“什么是”LINQ由什么组成的解释,我可能会提供比你提供的更多的信息。例如:
LINQ(Language-Integrated Query)是在.NET 3.5中添加的一组语言扩展和框架类,它使查询操作更具功能性。它基于IEnumerable和IQueryable及其泛型对应项的扩展方法,允许在LINQ to Objects中进行延迟执行和通过IQueryable进行远程处理,以及许多其他功能。还对C#和VB.NET进行了语言更改,以支持直接在语言中使用更“自然”的查询语法。
他们可能希望你知道,LINQ 是查询 IQueryable
和 IEnumerable
对象的新 DSL。本质上是“从…到…选择…”语法。了解它是如何通过 lambda 和函数式风格实现的可能会让你得到额外的分数。