Tag: lambda

lambda函数不closuresPython中的参数?

代码说话更多: from pprint import pprint li = [] for i in range(5): li.append(lambda : pprint(i)) for k in li: k() 产量: 4 4 4 4 4 为什么不 0 1 2 3 4 ?? 谢谢。 PS如果我写完整的装饰,它按预期工作: from pprint import pprint li = [] #for i in range(5): #li.append(lambda : pprint(i)) def closure(i): def _func(): pprint(i) return […]

为什么我不能在debugging器中编辑一个包含匿名方法的方法?

所以,每次我写一个lambdaexpression式或者匿名方法的时候,我都不太清楚 ,我不得不重新编译并重新启动整个应用程序或者unit testing框架来修复它。 这是非常烦人的,而最终我浪费的时间比通过使用这些结构所节省的时间更多。 尽pipeLinq和lambdas是我最喜欢的C#特性之一,但是如果可以的话,我尽量远离它们,这太糟糕了。 我想为什么是这样,有一个很好的技术理由,也许有人知道? 此外,有没有人知道它是否会在VS2010中修复? 谢谢。

实例方法引用和Lambda参数

我无法理解方法引用的语法,其中有两个参数a和b ,引用是b上的一个方法。 例如,我明白如何 Arrays.sort(personArray, comparators::compareByName); 相当于 Arrays.sort(personArray, (o1, o2) -> comparators.compareByName(o1, o2)); 因为在这种情况下,lambda参数匹配方法调用参数(o1, o2) 。 如何为这个lambda stream.sorted((o1, o2) -> o1.compareToIgnoreCase(o2)); 我的IDE告诉我这相当于: stream.sorted(String::compareToIgnoreCase); 我没有find一个规则来replace语法: a.method(b)与方法引用。 例如,如果lambda有三个或更多的参数呢? 这是合法吗? 第一个参数是否成为方法目标,剩下的成为参数?

什么是System.out :: println的等效lambdaexpression式

我偶然发现了以下使用System.out.println的方法引用的Java代码 class SomeClass{ public static void main(String[] args) { List<Integer> numbers = Arrays.asList(1,2,3,4,5,6,7,8,9); numbers.forEach(System.out::println); } } } System.out::println的等效lambdaexpression式是什么?

行家。 lambdaexpression式在-source 1.5中不受支持

我使用maven来构build我的项目。 我有以下configuration: D:\ freelance \ polyndrom> mvn -verion Apache Maven 3.2.3(33f8c3e1027c3ddde99d3cdebad2656a31e8fdf4; 2014-08-12T00:58:1 0 + 04:00)Maven home:C:\ Program Files \ apache \ apache-maven-3.2。 3 Java版本:1.8.0_25,供应商:Oracle公司Java家庭版:C:\ Program Files \ Java \ jdk1.8.0_25 \ jre默认语言环境:ru_RU,平台编码:Cp1251操作系统名称:“windows 7”,版本:“6.1 “,arch:”amd64“,family:”dos“ 但是当我编译项目,我看到以下错误: lambda expressions are not supported in -source 1.5 我很困惑 – 姆文看到我使用Java 8。 pom.xml中: <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 […]

为什么java.util.Collection没有实现新的Stream接口?

我花了一些时间开始研究关于stream和lambdas的java-8嗡嗡声。 让我吃惊的是,你不能直接在java.util.Collection上应用Stream操作,比如.map() .filter() 。 是否有一个技术原因,为什么java.util.Collection接口没有扩展这些stream操作的默认实现? 使用Googlesearch一下,我看到很多例子都是按照以下模式进行编码的: List<String> list = someListExpression; List<String> anotherList = list.stream().map(x -> f(x)).collect(Collectors.toList()); 如果你在你的代码中有很多这样的stream操作,就会变得非常笨拙。 由于.stream()和.collect()与你想expression的内容完全无关,所以你更愿意说: List<String> list = someListExpression; List<String> anotherList = list.map(x -> f(x));

用java 8 lambdaexpression式打印错误信息

我想使用一个静态方法作为setter助手来捕获exception,并打印有关失败操作的debugging信息。 我不想只有例外的细节。 我想显示哪些属性正在设置,以便详细帮助快速debugging问题。 我正在使用Java 8。 我应该如何提供或检测设置的财产? 我希望在示例中删除“名称”string,并得到相同的结果。 我知道我不能使用所提供的setter方法的reflection来转换为lambdaexpression式,然后转换为BiConsumer。 我得到这个,但需要提供属性名称。 /** setter helper method **/ private static <E, V> void set(E o, BiConsumer<E, V> setter, Supplier<V> valueSupplier, String propertyName) { try { setter.accept(o, valueSupplier.get()); } catch (RuntimeException e) { throw new RuntimeException("Failed to set the value of " + propertyName, e); } } 例: Person p […]

如何检查深度lambdaexpression式中的空值?

我如何检查深度lamdaexpression式中的空值? 举例来说,我有一个嵌套多层的类结构,我想执行下面的lambda: x => x.Two.Three.Four.Foo 我希望它返回null如果两个,三个或四个为空,而不是抛出一个System.NullReferenceException。 public class Tests { // This test will succeed [Fact] public void ReturnsValueWhenClass2NotNull() { var one = new One(); one.Two = new Two(); one.Two.Three = new Three(); one.Two.Three.Four = new Four(); one.Two.Three.Four.Foo = "blah"; var result = GetValue(one, x => x.Two.Three.Four.Foo); Assert.Equal("blah", result); } // This test will fail […]

_ =>这在Lambdaexpression式中意味着什么?

像_=> expr这样的lambdaexpression式是什么意思? _作为lambdainput的目的是什么? 例: int sum = 0; list.ForEach(_=> { sum += 1; });

如何使用条件三元运算符在lambdas之间有条件地分配Func <>?

通常,使用条件运算符时,语法如下: int x = 6; int y = x == 6 ? 5 : 9; 没有什么特别的,挺直的。 现在,让我们尝试在将Lambda分配给Functypes时使用它。 让我解释: Func<Order, bool> predicate = id == null ? p => p.EmployeeID == null : p => p.EmployeeID == id; 这是相同的语法, 应该工作? 对? 由于某些原因,不。 编译器给出了这个不错的信息: 错误1无法确定条件expression式的types,因为“lambdaexpression式”和“lambdaexpression式”之间没有隐式转换 然后,我继续前进,改变语法,并以这种方式工作: Func<Order, bool> predicate = id == null ? predicate = p […]