如何在F中别名.NET函数#
因此,在F#中,函数被认为是一等公民,因为它是一种函数编程语言,可以被引用 所以我可以做得很好如何在F中别名.NET函数#,.net,f#,.net,F#,因此,在F#中,函数被认为是一等公民,因为它是一种函数编程语言,可以被引用 所以我可以做得很好 let double x = x * 2 let times2 = double 现在times2是double的别名,并且具有相同的函数签名 整数->整数 为什么我不能这样做来别名.NET函数 let write = System.IO.File.WriteAllLines 如果我尝试这样做,它会认为我丢失了一个参数,但实际上我并没有试图调用该函数,而是试图对其进行别名
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.writeAllines
不是一个F#语法函数。它是一个静态成员,因此可以(事实上)重载它。然后编译器不知道应该选择哪个重载,他只需要您提供一个额外的提示
您可以提供以下参数之一:
let write x y = System.IO.File.WriteAllLines(x, y)
或某些类型批注:
let write = System.IO.File.WriteAllLines : _ * _ -> _
这将解析为一个唯一的重载。我现在明白了,这很尴尬,因为编译器本可以使用更好的错误消息。它可以说无法确定唯一的过载,这在其他情况下是可以确定的,但由于某种原因,它没有确定这个过载。