我想知道为什么F#编译器允许以下
type MyMath() =
member this.Add a b = a + b
Add方法及其参数的类型是什么?如果我将它编译到库中并尝试在C#中使用它将会期望什么类型的参数?
对于类方法,F#是否要求您明确指定类型?
答案 0 :(得分:4)
您可以在F#interactive中输入代码并自行查看推断类型:
> type MyMath() =
member this.Add a b = a + b;;
type MyMath =
class
new : unit -> MyMath
member Add : a:int -> b:int -> int
end
此处,编译器使用+
运算符的默认类型int
。运算符可以与其他类型一起使用,但推断使用int
作为默认值。您可以使用类型注释,但如果您对推断类型感到满意,则不需要这样做。
通常,您可以在F#中使用类型注释来指定类型,但在很多情况下,推断类型将完全符合您的要求,因此您不必使代码更加冗长,如果推理表现得如预期的那样。
当然,如果您正在编写某个库并希望在更改API时非常小心,那么您可能希望使用类型注释(或者您可以添加F#接口文件.fsi
)
答案 1 :(得分:2)
F#Interactive是你的朋友:
type MyMath =
class
new : unit -> MyMath
member Add : a:int -> b:int -> int
end