我在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
答案 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#允许我们在这里省略虚拟变量_
和__
或使用通配符,那会很棒。我发现了对此(一次性变量,丢弃)here和here的讨论。但是,对于C#7中的var (_, _) = (3,4);
,通配符支持仅限于元组解构。
如果C#使用元组,它使用函数参数列表会更好,特别是在LanguageExt上下文中。