Tag: lambda

为什么我们需要纤维

对于纤维我们有一个经典的例子:生成斐波那契数 fib = Fiber.new do x, y = 0, 1 loop do Fiber.yield yx,y = y,x+y end end 为什么我们需要纤维? 我可以用相同的Proc重写这个(实际上是closures的) def clsr x, y = 0, 1 Proc.new do x, y = y, x + y x end end 所以 10.times { puts fib.resume } 和 prc = clsr 10.times { puts prc.call } 将返回相同的结果。 […]

lambda函数可以recursion吗?

可能重复: recursionlambda函数在c + + 0x 这是一个普通的旧recursion函数: int fak(int n) { return (n <= 1) ? 1 : n * fak(n – 1); } 我如何写一个这样的recursion函数作为lambda函数? [](int n) { return (n <= 1) ? 1 : n * operator()(n – 1); } // error: operator() not defined [](int n) { return (n <= 1) ? 1 : […]

函数指针,闭包和Lambda

我现在正在学习函数指针,而当我准备好关于这个主题的K&R章节时,第一个打到我的是“嘿,这有点像闭包。 我知道这个假设在某种程度上是根本错误的,在线search之后并没有真正find对比的分析。 那么为什么C风格函数指针与闭包或lambdas根本不同? 据我所知,与函数指针仍然指向一个已定义的(已命名的)函数,而不是能够匿名定义该函数有关。 为什么要传递一个函数到第二种情况下更强大的函数中,而第二种情况下它是未命名的,而第一种情况只是一个正常的日常函数而已? 请告诉我如何以及为什么我错误地比较两者如此密切。 谢谢。

在Java 8中,如何使用lambda将Map <K,V>转换为另一个Map <K,V>?

我刚刚开始研究Java 8并尝试使用lambdaexpression式,我想我会尝试重写最近编写的一个非常简单的东西。 我需要将一个string映射到列到另一个string映射到列新地图列是在第一个地图列的防御副本。 列有一个拷贝构造函数。 我到目前为止最接近的是: Map<String, Column> newColumnMap= new HashMap<>(); originalColumnMap.entrySet().stream().forEach(x -> newColumnMap.put(x.getKey(), new Column(x.getValue()))); 但我确定有一个更好的方法来做到这一点,我会很感激的一些build议。

是Linq还是Lambda?

我知道这是Linq: var _Results = from item in _List where item.Value == 1 select item; 而我知道这是Lambda: var _Results = _List.Where(x => x.Value == 1); 编者按:以上不仅仅是Lambda,它是Linq使用谓词是Lambda的“Method Syntax”。 要清楚的是,以上两个样本都是Linq(我原来的post是不正确的,但是我留下错误来说明混淆提示这个问题)。 但是Linq是Lambda的子集还是什么? 为什么有两个看似相同的技术? 是否有技术上的理由来select一个吗?

使用lambdaexpression式处理事件

我目前有一个页面,声明如下: public partial class MyPage : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { //snip MyButton.Click += (o, i) => { //snip } } } 我只是最近才从1.1版本移植到.NET 3.5,所以我习惯于在Page_Load之外编写事件处理程序。 我的问题是 是否有任何性能缺陷或缺陷,我应该留意当使用lambda方法呢? 我更喜欢它,因为它确实更简洁,但我不想牺牲性能来使用它。 谢谢。

Java 8 lambda无效参数

假设我在Java 8中有以下function接口: interface Action<T, U> { U execute(T t); } 对于某些情况,我需要一个没有参数或返回types的动作。 所以我写这样的东西: Action<Void, Void> a = () -> { System.out.println("Do nothing!"); }; 不过,它给我编译错误,我需要把它写成 Action<Void, Void> a = (Void v) -> { System.out.println("Do nothing!"); return null;}; 这是丑陋的。 有没有什么办法摆脱Voidtypes的参数?

Java 8stream:多个filter与复杂的条件

有时候你想过滤一个Stream并且有多个条件: myList.stream().filter(x -> x.size() > 10).filter(x -> x.isCool()) … 或者你可以做一个复杂的条件和一个单一的 filter : myList.stream().filter(x -> x.size() > 10 && x -> x.isCool()) … 我的猜测是,第二种方法有更好的性能特点,但我不知道 。 第一种方法赢得了可读性,但是什么更好的performance?

有没有办法指定一个“空”的C#lambdaexpression式?

我想声明一个“空的”lambdaexpression式,没有什么。 有没有办法做这样的事情,而不需要DoNothing()方法? public MyViewModel() { SomeMenuCommand = new RelayCommand( x => DoNothing(), x => CanSomeMenuCommandExecute()); } private void DoNothing() { } private bool CanSomeMenuCommandExecute() { // this depends on my mood } 我这样做的意图只是控制我的WPF命令的启用/禁用状态,但这是一个旁白。 也许这对我来说太早了,但是我想一定有办法像这样以某种方式声明x => DoNothing() lambdaexpression式来完成同样的事情: SomeMenuCommand = new RelayCommand( x => (), x => CanSomeMenuCommandExecute()); 有没有办法做到这一点? 似乎没有必要使用无所事事的方法。

为什么这个Java 8 lambda无法编译?

以下Java代码无法编译: @FunctionalInterface private interface BiConsumer<A, B> { void accept(A a, B b); } private static void takeBiConsumer(BiConsumer<String, String> bc) { } public static void main(String[] args) { takeBiConsumer((String s1, String s2) -> new String("hi")); // OK takeBiConsumer((String s1, String s2) -> "hi"); // Error } 编译器报告: Error:(31, 58) java: incompatible types: bad return type in […]