所以在F#中,函数被认为是一等公民,因为它是一种函数式编程语言,可以被引用.
所以我可以做得很好
let double x = x * 2
let times2 = double
Run Code Online (Sandbox Code Playgroud)
现在times2是double的别名,并且具有相同的函数签名int - > int
为什么我不能这样做来为.NET函数添加别名?
let write = System.IO.File.WriteAllLines
Run Code Online (Sandbox Code Playgroud)
如果我尝试这样做,它认为我错过了一个参数,但实际上我并没有尝试调用该函数,我试图别名它.
The member or object constructor 'WriteAllLines' does not take 1 argument(s). An overload was found taking 2 arguments.
Run Code Online (Sandbox Code Playgroud)
有没有办法为预定义的.NET函数添加别名,或者它不可能?
事实上,System.IO.File.WriteAllLines它不是一个F#语法功能.它是一个静态成员,所以它可以(实际上是)重载.然后编译器不知道要拾取哪个重载,他只需要你提供一个额外的提示.
你可以提供参数:
let write x y = System.IO.File.WriteAllLines(x, y)
Run Code Online (Sandbox Code Playgroud)
或某些类型的注释:
let write = System.IO.File.WriteAllLines : _ * _ -> _
Run Code Online (Sandbox Code Playgroud)
这解决了一个独特的过载.