如何在F#中使用别名.NET函数

时间:2015-01-30 05:10:55

标签: .net f#

所以在F#中,函数被认为是一等公民,因为它是一种函数式编程语言,可以被引用。

所以我可以做得很好

    let double x = x * 2

    let times2 = double

现在times2是double的别名,并且具有相同的函数签名 int - > INT

为什么我不能这样做来为.NET函数设置别名?

   let write = System.IO.File.WriteAllLines

如果我尝试这样做,它会认为我错过了一个参数,但实际上我并没有尝试调用该函数,我试图将其作为别名。

The member or object constructor 'WriteAllLines' does not take 1 argument(s). An overload was found taking 2 arguments.

有没有办法为预定义的.NET函数添加别名?或者它是不可能的?

1 个答案:

答案 0 :(得分:8)

实际上System.IO.File.WriteAllLines不是F#语法功能。它是一个静态成员,所以它可以(实际上是)重载。然后编译器不知道要拾取哪个重载,他只需要你提供一个额外的提示。

您可以提供参数:

let write x y = System.IO.File.WriteAllLines(x, y)

或某些类型的注释:

let write  = System.IO.File.WriteAllLines : _ * _ -> _

解决了一个独特的过载问题。