【问题标题】:Interview: What is Lambda expression? [closed]采访:什么是 Lambda 表达式? [关闭]
【发布时间】:2011-04-19 10:35:27
【问题描述】:

我最近接受了两次电话采访。

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

我声称 Lambda 表达式是代替委托的未命名方法。 但不知何故,这还不够。

我发现在电话采访中很难准确地解释这一点。

有人知道吗?

【问题讨论】:

  • stackoverflow.com/questions/471502/what-is-linq/471592#471592“让我们开始这次探索”上面的部分。
  • 所有 LINQ 方法都被命名。有些将未命名的方法作为参数,即匿名方法或 lambda 表达式
  • 我不敢相信回答这个明显重复的人数。
  • 不要忘记,如果 HR 正在面试,他们可能只是有答案,而对上下文的理解不足以在一定程度上理解你的答案的含义。
  • 我很抱歉破坏了这个问题。我的意思是 Lambda 表达式,我的答案也指向了您在上面看到的 Lamda 表达式。当我问这个问题时,我以某种方式想到了 Linq。我已经纠正了。再次抱歉。

标签: lambda


【解决方案1】:

Lambda 表达式是作为常量值给出的无名函数。它们可以出现在任何其他常量可能出现的任何位置,但通常作为参数写入某个其他函数。典型的例子是你将一个比较函数传递给一个通用的“排序”例程,而不是去定义一个完整的函数(并导致词法不连续和命名空间污染)来描述这个比较,你可以传递一个描述比较的 lambda 表达式。

但是,这忽略了 Lambda 表达式最重要的特性之一,即它们在其外观的上下文中执行。因此,他们可以使用在该上下文中定义的变量的值。这将函数指针与真正的 lambda 表达式区分开来。在支持可变变量的语言中,适当的 lambda 表达式提供了更改这些变量值的能力。

Lambda 表达式出现在所有 LISP、Perl、Python 以及最新版本的 C++、Objective C、C# 和 Java 8 中(使用不同的语法),但特别是在 C 中没有出现,即使它有处理传递的方法函数(或它们的一些借口)作为参数。它们是具有特定语义的语法元素,而这些语义对运行时的要求比 C 设计的要求要高。

【讨论】:

  • 我相信从 JDK-1.8 开始,Lambda 表达式在 Java 中可用。它们看起来与 C# 中的 Lambda 表达式非常相似,只是 Java 的“Fat Arrow”很薄; -> 相对于 =>
【解决方案2】:

您应该在 msdn 中查看 Lambda Expression

【讨论】:

  • 请更正链接
【解决方案3】:

lambda 表达式是无名的代码暂停。

考虑一下这个匿名的“将两件事相乘”函数(又名 lambda 表达式),它使用了一些非常非特定的符号。

λ(x, y) -> x * y

您的回答非常针对您使用过 lambdas 的地方(我猜是 C#?),我怀疑面试官要求的是更一般的理解。委托的概念、C# 语言和方法的概念都次要于 lambda 是什么以及它们如何工作。例如,您可以使用 lambda 表达式 on paper 进行计算,而无需涉及任何方法。

【讨论】:

  • 我会摆脱“代码”的特定概念:lambda 抽象是关于计算的,而不是任何可以描述这种计算的特定语言。碰巧有些编程语言包含或多或少直接表示它们的语法,就像大多数流行的语言直接表示代数表达式一样。
【解决方案4】:

要回答您修改后的问题,为此,您的回答实际上很好。我要做的唯一改变是强调“内联”这个词。

Lambda 表达式是一个未命名的方法,它内联编写在需要委托的地方。

【讨论】:

    【解决方案5】:

    我说过 Linq 是一个未命名的方法来代替委托。

    实际上,这根本不是 LINQ,而是“lambda 表达式”。从技术上讲,LINQ 甚至不使用它们。

    LINQ 代表“语言集成查询”。确切地说,它是“from...where..select”关键字(即,query 语法被 集成language 中) .

    现在,为了让这些关键字做事,语言(和 CLR)中添加了更多内容(例如 lambda、扩展方法、Enumerable 类等)。

    【讨论】:

    • 我刚刚意识到我毁了这个问题。你说的对。问题应该是 Lambda 表达式。在撰写本文时,我对 LINQ 有一些想法。 :(
    【解决方案6】:

    他们可能希望您知道 LINQ 是用于查询 IQueryableIEnumerable 对象的新 DSL。本质上,“from ... where ... select ...”语法。知道它是用 lambdas 和函数式风格在幕后实现的,可能会给你加分。

    【讨论】:

      【解决方案7】:

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

      话虽如此,如果他们真的想要解释 LINQ 的组成部分,我可能会包含您提供的更多信息。比如:

      LINQ 或 Language-Integrated Query 是 .NET 3.5 中添加的一组语言添加和框架类,它们支持更实用的查询操作方法。它基于 IEnumerable 和 IQueryable 的扩展方法以及它们的通用对应方法,这些方法允许延迟执行 LINQ to Objects 和通过 IQueryable 进行远程处理,以及许多其他功能。还对 C# 和 VB.NET 进行了语言更改,以直接在语言中支持更“自然”的查询语法。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-03-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-07-09
        • 1970-01-01
        • 2022-11-14
        相关资源
        最近更新 更多