所以在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函数添加别名?或者它是不可能的?
答案 0 :(得分:8)
实际上System.IO.File.WriteAllLines
不是F#语法功能。它是一个静态成员,所以它可以(实际上是)重载。然后编译器不知道要拾取哪个重载,他只需要你提供一个额外的提示。
您可以提供参数:
let write x y = System.IO.File.WriteAllLines(x, y)
或某些类型的注释:
let write = System.IO.File.WriteAllLines : _ * _ -> _
解决了一个独特的过载问题。