多链式lambda表达式?

时间:2017-05-19 22:54:21

标签: c# lambda currying

我偶然发现了code golf question

  

给定一个字符串s和一个表示n中的索引的整数s,输出s并移除n个位置的字符。

投票率最高的answer(截至本文)是在C#中。

s=>n=>s.Remove(n,1);

这种多=>语法是什么?它看起来类似于lambda表达式(s,n)=>s.Remove(n,1),但我无法弄清楚如何使用此代码。

2 个答案:

答案 0 :(得分:9)

当它分散一点时非常简单!

s =>
     n =>
         s.Remove(n, 1);

让我们调用我们的函数fn:使用变量fn调用s会返回另一个带变量n的函数。

fn("hello")(0)

你可以看到,在致电fn("hello")之后,我们实际上已经得到了这个:

n => "hello".Remove(n, 1);

因此,当我们调用返回的函数时,我们通过给它n来执行它。

答案 1 :(得分:0)

如果没有类型定义,对我来说似乎不是一个有效的答案:

Func<string, Func<int, string>> f = s => n => s.Remove(n, 1);

string result = f("123")(1);   // "13"