因此,在 F# 中,函数应该是一等公民,因为它是一种函数式编程语言并且可以被引用。
所以我可以做到这一点
let double x = x * 2
let times2 = double
现在 times2 是 double 的别名,并且具有相同的函数签名 整数 -> 整数
为什么我不能这样做来为 .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 函数设置别名,还是不可能?
最佳答案
其实 System.IO.File.WriteAllLines
不是 F# 语法函数。它是一个静态成员,因此它可以(并且确实是)重载。然后编译器不知道要选择哪个重载,他只需要你的额外提示。
您可以提供参数:
let write x y = System.IO.File.WriteAllLines(x, y)
或一些类型注释:
let write = System.IO.File.WriteAllLines : _ * _ -> _
解析为唯一的重载。
关于.net - 如何在 F# 中为 .NET 函数命名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28229603/