问题标签 [lambda]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
9 回答
122734 浏览

c# - C#中Action委托的使用

我正在与 C# 中的 Action Delegates 一起工作,希望能更多地了解它们并思考它们可能有用的地方。

有没有人使用过 Action Delegate,如果有,为什么?或者你能举一些可能有用的例子吗?

0 投票
6 回答
3007 浏览

lambda - 什么是 lambda,什么是示例实现?

我对编程相当陌生,在阅读大量 lambda 概念的同时,不断出现这种概念,但我很难弄清楚它实际上是什么,以及如何实现它将使我的编程生活变得更好。那么首先,什么是 lambda,其次它是如何实现的?

感谢所有发帖的人。正如评论中提到的,这是重复的,但是这里有很多很棒的答案,我想为社区保留它们,所以我将它变成了社区帖子。这是另一个问题的链接:

什么是 lambda(函数)?

0 投票
3 回答
1334 浏览

c# - 重构 OrderBy 表达式

我希望能够在 linq 表达式中重构OrderBy子句。

这是一个重构where子句 的例子

前:


后:


我想知道除了我想重构Orderby表达式之外,是否可以进行相同类型的事情。

先感谢您

0 投票
3 回答
357 浏览

haskell - 这些值在这个 haskell 函数中来自哪里?

假设我有以下功能:

的结果sumAll [(1,1),(2,2),(3,3)]将是12

我不明白这些(x,y)值来自哪里。好吧,我知道它们来自xs变量,但我不明白如何。我的意思是,在没有 where 关键字的情况下直接执行上面的代码,它会是这样的:

而且我无法理解,在上面的代码中,f变量和(x,y)变量如何表示(\(x,y) -> x+y)lambda 表达式。

0 投票
5 回答
1657 浏览

c# - 用于事件处理程序的 Lambda?

C# 3 中的 Lambda 语法使得创建单行匿名方法非常方便。它们是对 C# 2 给我们的冗长的匿名委托语法的明确改进。然而,lambda 的便利性带来了在我们不一定需要它们提供的函数式编程语义的地方使用它们的诱惑。

例如,我经常发现我的事件处理程序是(或至少一开始是)简单的单行程序,它们设置状态值,或调用另一个函数,或在另一个对象上设置属性等。对于这些,我应该混乱我的类还有另一个简单的函数,还是我应该在我的构造函数中将一个 lambda 填充到事件中?

在这种情况下,lambda 有一些明显的缺点:

  • 我不能直接调用我的事件处理程序;它只能由事件触发。当然,对于这些简单的事件处理程序,我几乎不需要直接调用它们
  • 我无法从事件中解开我的处理程序。另一方面,我很少需要解开事件处理程序,所以这不是什么大问题,无论如何

出于上述原因,这两件事并不困扰我。而且我可以通过将 lambda 存储在成员委托中来解决这两个问题,如果它们确实是问题的话,但这会破坏使用 lambda 来方便和保持类整洁的目的。

不过,还有两件事我认为可能不是那么明显,但可能更成问题。

  • 每个 lambda 函数在其包含范围内形成一个闭包。这可能意味着在构造函数中较早创建的临时对象的存活时间比它们需要的时间长得多,因为闭包维护了对它们的引用。现在希望编译器足够聪明,可以从闭包中排除 lambda 不使用的对象,但我不确定。有人知道吗?

    再次幸运的是,这并不总是一个问题,因为我不经常在我的构造函数中创建临时对象。不过,我可以想象一个我做过的场景,而且我不能轻易地将它的范围限定在 lambda 之外。

  • 可维护性可能会受到影响。重要时刻。如果我将一些事件处理程序定义为函数,而将一些事件处理程序定义为 lambda,我担心这可能会使追踪错误或仅仅理解类变得更加困难。后来,如果我的事件处理程序最终扩展,我要么必须将它们移动到类级函数,要么处理我的构造函数现在包含大量实现我的类功能的代码的事实.

所以我想借鉴其他人的建议和经验,也许是那些有其他语言经验并具有函数式编程特性的人。这种事情有什么既定的最佳实践吗?您是否会避免在事件处理程序中或在 lambda 明显超出其封闭范围的其他情况下使用 lambda?如果不是,您会在多大的阈值下决定使用实函数而不是 lambda?上述任何陷阱有没有严重伤害任何人?有没有我没有想到的陷阱?

0 投票
4 回答
2385 浏览

c# - Visual Studio 2008 无法识别 Lambda 表达式语法

我最近使用内置的转换工具将 Web 应用程序项目(以及一些依赖项目)从 .net 2.0 升级到了 .net 3.5。一切都运行良好,例如使用 MS AJAX 3.5 与 2.0 中的外部 MS AJAX 库。

当我尝试使用新的 Lambda 表达式语法时,出现了我的问题。编译器不会将 Lambda 表达式识别为有效语法。解决方案中所有项目的目标框架版本设置为 3.5。我还能够在同一解决方案中的库项目中成功使用 Lambda 表达式。

这是给我错误的代码。没什么特别的。

我得到的具体错误是:

任何帮助将不胜感激。我一直在搜索谷歌,运气不佳

0 投票
6 回答
7533 浏览

c# - 委托中的变量范围

我发现以下内容很奇怪。再说一次,我主要在动态语言中使用闭包,这不应该被同一个“错误”怀疑。以下使编译器不高兴:

它说:

不能在此范围内声明名为“i”的局部变量,因为它会给“i”赋予不同的含义,而“i”已在“子”范围中用于表示其他内容

所以这基本上意味着在委托中声明的变量将具有在其中声明的函数的范围。不完全是我所期望的。我什至没有尝试调用该函数。至少 Common Lisp 有一个特性,你说一个变量应该有一个动态名称,如果你真的希望它是本地的。这在创建不泄漏的宏时尤其重要,但类似的东西在这里也很有帮助。

所以我想知道其他人如何解决这个问题?

为了澄清我正在寻找一种解决方案,其中我在委托中声明的变量不会干扰委托之后声明的变量。而且我希望仍然能够捕获在委托之前声明的变量。

0 投票
3 回答
22759 浏览

c# - C# 中的正确柯里化

给定一个DoSomething采用(无参数)函数并以某种方式处理它的方法。有没有比下面的代码片段更好的方法来为带参数的函数创建“重载”?

0 投票
8 回答
67190 浏览

c# - 当作为普通委托参数提供时,为什么必须强制转换 lambda 表达式

取方法 System.Windows.Forms.Control.Invoke(Delegate method)

为什么这会产生编译时错误:

然而这很好用:

当方法需要一个普通的委托时?

0 投票
7 回答
7713 浏览

c#-3.0 - C# lambda 表达式和惰性求值

lambda 表达式的一个优点是您必须仅在需要函数结果时才对函数求值。

在以下(简单)示例中,仅在编写者存在时才评估文本函数:

不幸的是,这使得使用代码有点难看。你不能用常量或变量来调用它

并且必须这样称呼它:

编译器无法从传递的常量中“推断”出无参数函数。有没有计划在未来的 C# 版本中改进这一点,或者我错过了什么?

更新:

我自己发现了一个肮脏的黑客:

现在我可以将函数定义为:

并用函数或值调用它。