Questions tagged «lambda»

Lambda是匿名函数(即没有标识符,如类中的方法),可以在多种编程语言中使用。

14
是什么触发了lambda函数在现代主流编程语言中的流行?
在过去的几年中,匿名函数(又名lambda函数)已成为一种非常流行的语言结构,几乎每种主流/主流编程语言都已经引入了它们,或计划在即将发布的标准修订版中引入它们。 但是,匿名函数是数学和计算机科学中一个非常古老且非常著名的概念(由数学家Alonzo Church于1936年左右发明,并自1958年以来被Lisp编程语言使用,请参见此处)。 那么,为什么今天的主流编程语言(其中许多起源于15至20年前)从一开始就不支持lambda函数,而仅在后来才引入它们呢? 在过去的几年中,是什么导致了匿名功能的广泛采用?是否有某种特定的事件,新的要求或编程技术引发了这种现象? 重要的提示 这个问题的重点是在现代主流(因此,除了少数例外,非功能性)语言中引入匿名功能。另外,请注意,匿名函数(块)存在于Smalltalk中,这不是一种功能语言,并且标准命名函数甚至在程序语言(如C和Pascal)中已经存在很长时间了。 请不要通过谈论“采用功能范式及其好处”来概括您的答案,因为这不是问题的主题。

3
什么是lambda,为什么有用?[关闭]
到目前为止,我听说: λ演算 Lambda程式设计 Lambda表达式 Lambda函数 这似乎都与函数式编程有关... 显然它将被集成到C ++ 1x中,所以我现在可能会更好地理解它: http://en.wikipedia.org/wiki/C%2B%2B0x#Lambda_functions_and_expressions 有人可以简短地定义什么是lambda事物,并给出一个有用的地方吗?

3
在Java 8中使用方法引用语法而不是lambda语法是否会对性能产生好处?
方法引用是否跳过了lambda包装器的开销?他们将来可能吗? 根据有关方法参考的Java教程: 有时... lambda表达式除了调用现有方法外什么也不做。在这种情况下,通常更容易按名称引用现有方法。方法引用使您可以执行此操作;它们是紧凑的,易于阅读的lambda表达式,用于已经具有名称的方法。 由于以下几个原因,我更喜欢lambda语法而不是方法引用语法: Lambda更清晰 尽管有Oracle的主张,但我发现lambda语法比对象方法引用的简写形式更易于阅读,因为方法引用的语法是模棱两可的: Bar::foo 您是否在x的类上调用静态的一参数方法并将其传递给x? x -> Bar.foo(x) 还是在x上调用零参数实例方法? x -> x.foo() 方法参考语法可以代表任何一种。它隐藏了您的代码实际在做什么。 Lambda更安全 如果将Bar :: foo引用为类方法,并且Bar以后添加了同名的实例方法(反之亦然),则代码将不再编译。 您可以始终使用lambda 您可以将任何函数包装在lambda中-因此您可以在所有位置一致地使用相同的语法。方法引用语法不适用于采用或返回原始数组,引发已检查异常或具有与实例和静态方法相同的方法名称的方法(因为该方法引用语法对于调用哪种方法尚不明确) 。当您使用相同数量的参数重载方法时,它们不起作用,但是无论如何您都不应这样做(请参见Josh Bloch的第41项),因此我们不能将其与方法引用相对应。 结论 如果这样做不影响性能,我很想在我的IDE中关闭警告,并始终使用lambda语法,而不会将偶然的方法引用散布到我的代码中。 聚苯乙烯 无论在这里还是那里,但在我的梦中,对象方法引用看起来都更像这样,并且无需lambda包装器就直接在对象上对方法应用invoke-dynamic: _.foo()

6
函数和lambda有什么区别?
我对“功能”和“ lambda”有些困惑。我看过一些例子,它们表明scheme关键字的lambda工作方式与JavaScript关键字非常相似function,但是我真的不知道它们之间的关系。 有人告诉我说.net中的对象时,“功能”和“方法”可以互换使用。我想知道“ lambda”和“ function”是否同样含义相同。看到希腊字母lambda(λ)出现在此站点上的许多化身中,我不知道'lambda'是否具有某些深奥的含义。更让人困惑的是,在.net中,C#的功能部分将传递给另一个函数的函数表达式称为“ lambda表达式”,因此,这个词似乎无处不在。 我对“ lambda演算”一词也很熟悉。 函数和lambda有什么区别?

6
Java最佳实践中是否会尽可能使用Lambda表达式?
我最近掌握了Java 8中引入的Lambda表达式。我发现,每当我使用功能接口时,我总是总是使用Lambda表达式,而不是创建实现该功能接口的类。 这被认为是好的做法吗?还是他们的情况不适合将Lambda用于功能接口?
52 java  lambda 

5
Python为什么不允许多行lambda?
有人可以解释BDFL选择使Python Lambdas单行的具体原因吗? 这很好: lambda x: x**x 这会导致错误: lambda x: x**x 我了解到,使lambda多行处理会以某种方式“干扰”正常的缩进规则,并且需要添加更多的例外,但这不值得吗? 以JavaScript为例。没有这些匿名功能,怎能生存?它们是必不可少的。难道Pythonista使用者不希望为了将每个多行函数都作为参数传递而不得不命名吗?
50 lambda  python 

3
“ Lambda the Ultimate”一词的由来和含义是什么?
几年来,我一直在纠缠于函数式编程语言,而我一直遇到这个短语。例如,这是“小计划者”的一章,该名字肯定早于博客。(否,该章无助于回答我的问题。) 我了解lambda的含义,匿名函数的概念既简单又强大,但是我无法理解在这种情况下“最终”的含义。 我看过这个短语的地方: 小策划人》第8章的标题 博客:http://lambda-the-ultimate.org/ 一系列“ Lambda the Ultimate X”论文:http : //library.readscheme.org/page1.html 我觉得我在这里缺少参考资料,有人可以帮忙吗?

10
LINQ和Lambda表达式的使用会导致代码可读性降低吗?[关闭]
我正在与Linq的同事讨论,我将在此处复制: 同事:让我们在这里诚实。Linq语法很烂。这是令人困惑和不直观的。 我:哦,比T-SQL更令人困惑吗? 同事:嗯,是的。 我:它具有相同的基本部分,选择,位置和来源 同事:对我来说,Linq是关系+ OO的混蛋。同事:不要误会我的意思-它功能强大,但是他们将SQL重新定位为使用agains对象集合。 我认为使用Linq + Lamda的功能非常强大(他同意),并且还使代码更易于阅读(他不同意这一点): pickFiles = from f in pickFolder.GetFiles("*.txt") where ValidAuditFileName.IsMatch(f.Name) select f; 要么 var existing = from s in ActiveRecordLinq.AsQueryable<ScannedEntity>() where s.FileName == f.FullName && s.DocumentType != "Unknown" select s; 或(此处为VB代码) Dim notVerified = From image In images.AsParallel Group Join verifyFile In …

5
Lambda表达式除了具有单个方法的匿名内部类之外,还具有其他功能吗?
期待已久的Java 8中的lambda表达式有了新的炒作;每三天有一篇关于他们有多酷的文章随他们出现。 据我了解,lambda表达式只不过是具有单个方法的匿名内部类(至少在字节码级别)。除此之外,它还具有另一个不错的功能-类型推断,但我相信可以在某种程度上使用泛型来实现这一点(当然不能像使用lambda表达式那样巧妙)。 知道了这一点,lambda表达式不仅会带来Java语法上的加糖功能吗?是否可以使用无法使用当前语言功能构建的lambda表达式来创建功能更强大,更灵活的类或其他面向对象的构造?

3
为什么要使用“函数操作”而不是for循环?
for (Canvas canvas : list) { } NetBeans建议我使用“功能操作”: list.stream().forEach((canvas) -> { }); 但是,这是为什么首选?如果有的话,很难阅读和理解。您正在调用stream(),然后forEach()使用带参数的lambda表达式canvas。我看不出有什么比for第一个片段中的循环更好。 显然,我只是出于美学目的。也许这里缺少我的技术优势。它是什么?为什么我应该改用第二种方法?


3
C#,Java和Scala的Closures / Lambdas /…方法的优缺点是什么?
我想知道C#和Scala之间在技术上的实现差异是什么,以及两种解决方案如何与布莱恩·格茨(Brian Goetz)发送给Project Lambda(JSR 335)邮件列表的Peek Past lambda电子邮件中表达的实现思想和关注点进行比较? 从电子邮件: 我们探索了“也许lambdas应该只是内部类实例,那真的很简单”之路,但最终走到了“函数是语言未来的更好方向”的位置。 并进一步: 世界的lambdas-are-objects视图与这个可能的未来冲突。对世界的lambda-are-functions视图并不了解,并且保留这​​种灵活性是不让lambda负担甚至带有客观性的负担的要点之一。 结论: Lambdas-are函数打开了大门。Lambdas-are-objects将它们关闭。 我们更希望看到那些门保持打开状态。 有人在Reddit主题上发表了一些评论: 我实际上通过电子邮件向Neal Gafter发送了电子邮件,由于我对他的解释的有限理解,C#和当前的Java设计非常相似,因为Delegates实际上是对象而不是函数类型。似乎他认为Java应该从C#的lambda的缺点中学习并避免它们(就像C#从Java的缺点中获悉并在一开始就避免它们一样)。 为什么“ Lambdas-are-functions”方法比“ Lambdas-are-objects”在将来能提供更多的机会?有人可以解释存在什么差异以及它们如何影响代码的编写方式吗? 看到Scala中的事情“可行”,我一直在想,我缺少关于C#/ Java(8)中采用/提出的方法的某些东西,可能与对向后兼容性的关注有关吗?
30 c#  java  scala  lambda  closures 

11
在商业软件中使用lambda函数\方法是否可以接受?
我注意到这里的帖子演示了使用proxys \ lambda函数来解决中间思想上的漏洞而无需大量重复:http : //www.markhneedham.com/blog/2009/04/04/functional-c中间图案的孔/ 问题似乎是初级开发人员和其他开发人员不一定了解函数指针\委托\ lambda函数概念是什么,这似乎使阅读(并可能调试)代码更加困难。 我们是否应该避免或严格限制在编写商业软件时使用此工具,特别是在小型团队或唯一的开发商商店中? 还是可以在适当的注释中使用它,并期望当我不再使用它时,下一个开发人员将理解或了解lambda函数?
26 lambda 

1
为什么Haskell不具有类型级别的lambda抽象?
是否有一些理论上的原因(例如类型检查或类型推断变得不确定)或实际原因(太难于正确实现)? 目前,我们可以换东西到newtype像 newtype Pair a = Pair (a, a) 然后有 Pair :: * -> * 但是我们不能做这样的事情λ(a:*). (a,a)。 (有一些语言可以使用它们,例如Scala可以。)


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.