Tag: lambda

匿名JavaScript函数f => f究竟做了什么?

我正在使用具有函数作为参数的函数的第三方库。 我正在做一些条件检查,以决定是否添加一个特定的函数作为参数,在某些情况下,我不想提供一个函数。 在这种情况下提供null会引发错误。 我发现这个代码有效,但是我不完全理解发生了什么。 compose(__DEV__ ? devTools() : f => f) 是f => f相当于() => {}是一个空的匿名函数吗?

E731不分配lambdaexpression式,使用def

每当我使用lambdaexpression式时,我都会得到这个pep8警告。 lambdaexpression式不推荐? 如果不是为什么?

做c ++ 11 lambdas捕获他们不使用的variables?

当我使用[=]来指示我希望所有局部variables被lambda中的值捕获时,会导致被复制的函数中的所有局部variables,还是lambda使用的所有局部variables? 所以,例如,如果我有: vector<int> my_huge_vector(100000); int my_measly_int; some_function([=](int i){ return my_measly_int + i; }); 即使我不在lambda中使用它,是否会复制my_huge_vector?

LINQexpression式中的String.IsNullOrWhiteSpace

我有以下代码: return this.ObjectContext.BranchCostDetails.Where( b => b.TarrifId == tariffId && b.Diameter == diameter || (b.TarrifId==tariffId && !string.IsNullOrWhiteSpace(b.Diameter)) || (!b.TarrifId.HasValue) && b.Diameter==diameter); 当我尝试运行代码时,出现此错误: LINQ to Entities不识别方法'布尔IsNullOrWhiteSpace(System.String)'方法,并且此方法不能被转换成存储expression式。 我怎样才能解决这个问题,编写比这更好的代码呢?

Java SE 8是否有对或元组?

我在Java SE 8中玩懒惰的函数操作,我想将索引i map到一个pair / tuple (i, value[i]) ,然后基于第二个value[i]元素进行filter ,最后输出只是指数。 我还必须忍受这个问题: 什么是Java中的C ++ Pair <L,R>的等价物? 在大胆的lambda和stream的新时代? 更新:我提出了一个相当简单的例子,在下面的答案之一中有@dkatzel提供的整洁的解决scheme。 但是,它并没有概括。 因此,让我加一个更一般的例子: package com.example.test; import java.util.ArrayList; import java.util.stream.IntStream; public class Main { public static void main(String[] args) { boolean [][] directed_acyclic_graph = new boolean[][]{ {false, true, false, true, false, true}, {false, false, false, true, false, true}, {false, false, […]

将Java Stream过滤为1并且只有1个元素

我正在尝试使用Java 8 Stream来查找LinkedList元素。 但是,我想保证,过滤条件只有1个匹配。 拿这个代码: public static void main(String[] args) { LinkedList<User> users = new LinkedList<>(); users.add(new User(1, "User1")); users.add(new User(2, "User2")); users.add(new User(3, "User3")); User match = users.stream().filter((user) -> user.getId() == 1).findAny().get(); System.out.println(match.toString()); } static class User { @Override public String toString() { return id + " – " + username; } int id; […]

如何序列化一个lambda?

我如何优雅地序列化一个lambda? 例如,下面的代码会抛出一个NotSerializableException 。 我怎样才能修复它,而不创build一个SerializableRunnable “虚拟”接口? public static void main(String[] args) throws Exception { File file = Files.createTempFile("lambda", "ser").toFile(); try (ObjectOutput oo = new ObjectOutputStream(new FileOutputStream(file))) { Runnable r = () -> System.out.println("Can I be serialized?"); oo.writeObject(r); } try (ObjectInput oi = new ObjectInputStream(new FileInputStream(file))) { Runnable r = (Runnable) oi.readObject(); r.run(); } }

在Java 8中,带有2个箭头的lambda是什么意思?

我已经阅读过几个Java 8教程。 现在我遇到了以下主题: java是否支持Currying? 在这里,我看到下面的代码: IntFunction<IntUnaryOperator> curriedAdd = a -> b -> a + b; System.out.println(curriedAdd.apply(1).applyAsInt(12)); 我明白这个例子总结了2个元素,但我不明白这个构造: a -> b -> a + b; 根据expression式的左边部分,该行应该执行以下function: R apply(int value); 在此之前,我只能用一个箭头认识lambda。

为什么必须以普通的Delegate参数的forms提供lambdaexpression式

采取方法System.Windows.Forms.Control.Invoke(委托方法) 为什么这给编译时间错误: string str = "woop"; Invoke(() => this.Text = str); // Error: Cannot convert lambda expression to type 'System.Delegate' // because it is not a delegate type 然而,这工作正常: string str = "woop"; Invoke((Action)(() => this.Text = str)); 当方法期望一个普通的代表?

为什么不能将一个匿名方法分配给var?

我有以下代码: Func<string, bool> comparer = delegate(string value) { return value != "0"; }; 但是,下面不编译: var comparer = delegate(string value) { return value != "0"; }; 为什么编译器不知道它是一个Func<string, bool> ? 它接受一个string参数,并返回一个布尔值。 相反,它给了我错误: 无法将匿名方法分配给隐式types的本地variables。 我有一个猜测,那就是如果var版本编译 ,它会缺乏一致性,如果我有以下几点: var comparer = delegate(string arg1, string arg2, string arg3, string arg4, string arg5) { return false; }; 以上是没有意义的,因为Func <>只允许最多4个参数(在.NET 3.5中,这是我使用的)。 也许有人可以澄清这个问题。 谢谢。