在Language-Ext中部分应用后扩充参数列表

时间:2017-09-29 15:59:58

标签: c# functional-programming language-ext

我在C#.NET Core项目中使用language-ext,我可以对现有函数进行部分应用:

Func<T1, T2, T3, T4, R> originalFun = /* ... */;

Func<T4, R> partialFun = par(originalFun, paramT1, paramT2, paramT3);

现在,我想扩充参数列表以匹配现有签名,其中只会忽略其他参数。用简单的语言我可以写:

Func<U1, U2, T4, R> augmentedFun = (_, __, paramT4) => partialFun(paramT4);

我想知道该库中是否有可用的“标准”工具来实现这一点,就像par取代手动lambda表达式一样。 TA

1 个答案:

答案 0 :(得分:0)

我不认为有一些现有的LanguageExt帮助函数允许该样式par和类似帮助程序使用,并且可能有充分的理由不添加它:

可能需要很多辅助函数来允许在任何位置具有相关参数。这个用例怎么样:

Func<T1, U1, U2, R> augmentedFun = (paramT1, _, __) = someFunction2(paramT1)

和这个

Func<U1, T2, U2, R> augmentedFun = (_, paramT2, __) = someFunction3(paramT2)

和这一个:

Func<T1, U1, T3, R> augmentedFun = (paramT1, _, paramT3) = someFunc4(paramT1, paramT3)

工作解决方案中的lambda表达式非常清楚你的意图是什么,即省略了哪些args。

顺便说一句:如果C#允许我们在这里省略虚拟变量___或使用通配符,那会很棒。我发现了对此(一次性变量,丢弃)herehere的讨论。但是,对于C#7中的var (_, _) = (3,4);,通配符支持仅限于元组解构。

如果C#使用元组,它使用函数参数列表会更好,特别是在LanguageExt上下文中。