.net - 如何在 F# 中为 .NET 函数命名

标签 .net f#

因此,在 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/

相关文章:

linq - F#:在不使用 Seq.empty 的情况下编写空序列

c# - 从本地控制台应用程序的 C++/CLI DLL 调用 C# 库时,无法授予最低权限请求

.net - 加载 ASP.NET DropDownList 对象

f# - 变量是否可以在一系列管道运算符期间引用自身,F#

f# - 在 F# 中如何检查变量是否为整数?

performance - 几乎相同的方法之间的出色性能差异

c# - C#/.Net Framework 中的堆大小 - 它可以增长吗?如何增长?

c# - 在 .NET/C# 中使用委托(delegate)加速反射 API

c# - 远程服务器返回错误 : 227 Entering Passive Mode (500 oops vs_utility_recv_peek: no data)

f# - 你能向我解释一下 OCaml 仿函数吗?