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

Augment parameter list after partial application in 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);

我想知道该库中是否有可用的 "standard" 工具来实现这一点,与 par 替换手动 lambda 表达式的方式大致相同。 TA

我不认为有一些现有的 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 表达式非常清楚您的意图,即要省略哪些参数。

顺便说一句:如果 C# 让我们在这里省略虚拟变量 ___ 或使用通配符,那就太好了。我找到了一个关于这个的讨论(throwaway variables, discards)here and here。但是通配符支持仅限于像 C# 7 中的 var (_, _) = (3,4); 这样的元组解构。

如果 C# 使用元组的方式与它使用函数参数列表的方式相同,那么很多事情会更好,尤其是在 LanguageExt 上下文中。