从C#调用部分应用的函数

时间:2015-05-21 10:39:01

标签: f# interop currying

我有一个需要很多参数的通用函数

f : a -> b -> c -> d -> e -> f

我想提供仅采用最后两个参数的专用函数,但为前三个参数提供一些固定值。

g : d -> e -> f
h : d -> e -> f

他们的实现类似于以下

g = f someA someB someC
h = f someA' someB' someC'

当然,这一切都很棒,但是当谈到从C#调用这些功能时,这是一个问题,因为他们的类型并没有得到美化和#34;。相反,我得到了一堆嵌套的FSharpFunc。 我可以通过定义像

这样的函数来避免这个问题
g d e = f someA someB someC d e
h d e = f someA' someB' someC' d e 

但这似乎是一个非常简单的机械转换,所以我想知道是否有自动获得相同结果的方法。也许我可以附加一些属性吗?

1 个答案:

答案 0 :(得分:1)

从技术上讲,如何编写gh的第一个和第二个选项并不完全相同。在第一种情况下,f应用于三个参数,结果新函数作为对象存储在值g中。

在第二种情况下,每次调用函数f时都会使用所有5个参数,当时传递someAsomeBsomeC的值打电话给g

对于大多数情况,这种区别并不是真正相关,但是当您想要缓存计算的某些部分时,它就变得很重要。

长话短说:转换有轻微的语义差异,因此无法真正自动完成。只需将参数添加到新gh