Questions tagged «lambda»

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

2
这是一个好模式吗:用一系列lambda代替长函数?
我最近遇到以下情况。 class A{ public: void calculate(T inputs); } 首先,A表示物理世界中的一个对象,这是不将类拆分的有力论据。现在,calculate()事实证明它是一个相当长且复杂的功能。我认为它有三种可能的结构: 写成一堵墙-优势-所有信息都集中在一个地方 private在类中编写实用程序函数,并在calculate主体中使用它们-缺点-类的其余部分不了解/不在意/不了解这些方法 编写calculate以下方式: void A::calculate(T inputs){ auto lambda1 = () [] {}; auto lambda2 = () [] {}; auto lambda3 = () [] {}; lambda1(inputs.first_logical_chunk); lambda2(inputs.second_logical_chunk); lambda3(inputs.third_logical_chunk); } 可以认为这是好事还是坏事?这种方法有什么问题吗?总而言之,当我再次面临同样的情况时,我是否应该将此视为一种好方法? 编辑: class A{ ... public: // Reconfiguration of the algorithm. void set_colour(double …
14 c++11  lambda 


1
C ++ 11支持高阶列表功能
大多数函数式编程语言(如Common Lisp的,计划/球拍,Clojure中,Haskell中,斯卡拉,ocaml的,SML)支持列出了一些常见的高阶功能,如map,filter,takeWhile,dropWhile,foldl,foldr(见如Common Lisp的,计划/球拍, Clojure并排参考表,Haskell,Scala,OCaml和SML文档。) C ++ 11是否在列表上具有等效的标准方法或函数?例如,考虑以下Haskell代码段: let xs = [1, 2, 3, 4, 5] let ys = map (\x -> x * x) xs 如何在现代标准C ++中表达第二个表达式? std::list<int> xs = ... // Initialize the list in some way. std::list<int> ys = ??? // How to translate the Haskell expression? 上面提到的其他高阶函数呢? …

1
Java 8:在API中传递流以进行惰性操作的良好实践?
在像Guava这样的Java 8之前的lambda繁重库中,输出使用通用的Java Collection Framework接口,因此很容易将它们传递给外部/内部API,并且如果库方法做到了,则仍然可以利用一些惰性计算(例如lazy filter()和transform())。 但是,在Java 8 Streams中,获取Collection/ 的调用Map是终端(即渴望),并且还将分配新的数据结构来保存结果。 对于中间具有多个阶段和策略模式的复杂计算,由于中间结果,这会导致很多不必要的分配。 因此,人们是否认为采用内部API(即策略模式策略)并返回Streams 是一个好习惯,还是我应该退后到懒惰的Guava API而不精简(我想是双关语)? 编辑: 我主要关心的Stream是它只能被消费一次并传递Supplier<Stream<X>>看起来非常笨拙的东西。它几乎迫使您只通过a Collection然后重新stream()通过(并为此付出了急切的评估费用)。
12 java  lambda 

3
在Java 8中,使用方法引用表达式或返回功能接口实现的方法在样式上是否更好?
Java 8添加了功能接口的概念,以及许多旨在采用功能接口的新方法。这些接口的实例可以使用方法引用表达式(例如SomeClass::someMethod)和lambda表达式(例如(x, y) -> x + y)来简洁地创建。 我和一位同事对什么时候最好使用一种或另一种形式(在这种情况下,“最佳”实际上可以归结为“最易读”和“最符合标准做法”)有不同的看法,因为他们基本上是相反的当量)。具体而言,这涉及以下所有情况: 所涉及的函数不在单个范围内使用 给实例起个名字有助于提高可读性(与之相反,例如,逻辑足够简单以一目了然地看到正在发生的事情) 没有其他编程原因可以解释为什么一种形式优于另一种形式。 我目前对此事的看法是,添加私有方法并通过方法引用进行引用是更好的方法。感觉这就是设计功能使用方式的方式,并且似乎更容易通过方法名称和签名传达正在发生的事情(例如,“ boolean isResultInFuture(Result result)”显然是在说要返回布尔值)。如果将来对类的增强希望使用相同的检查,但不需要功能接口包装器,则这也可使private方法可重用。 我的同事希望使用一种方法来返回接口的实例(例如“ Predicate resultInFuture()”)。对我而言,这感觉不完全是该功能的预期用途,感觉有点笨拙,而且似乎很难通过命名来真正传达意图。 为了使这个示例具体,下面是使用不同样式编写的相同代码: public class ResultProcessor { public void doSomethingImportant(List<Result> results) { results.filter(this::isResultInFuture).forEach({ result -> // Do something important with each future result line }); } private boolean isResultInFuture(Result result) { someOtherService.getResultDateFromDatabase(result).after(new Date()); } …

4
Java的主要重点是什么?为什么要花这么长时间才能获得新功能?
我一直在探索JDK8中的新功能,例如lambda表达式,扩展方法和新的流API。 显然,这些功能都不是编程世界中的新增功能,这使人们感到奇怪的是,为什么到目前为止在Java中都无法获得所有这些功能。 Lisp(1958),SML(1973),Haskell(1990),Python(1991),JavaScript(1994),Ruby(1995),Scala(2003),C#(2007)和Lisp和55年后有lambda表达式Java(2013)中几乎所有其他人。 我在SIC(1996年)中读到有关流的信息。 我一直在想为什么现在呢?有证据表明,与其他语言竞争不是动机。 看来,此Java版本中的所有很酷的新功能只是实现并行性的副产品。我们之所以拥有lambda,是因为它们使编写并行算法变得更加简单,而我们拥有扩展方法,是因为我们需要它们来支持lambda表达式所需的更改等。 因此,我的问题是:我们能否安全地确认即将发布的Java版本中的主题实际上是并行性?还是我们可以证明迄今为止使用Java编写本书中最古老的技巧的其他原因?
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.