这里我推断的函数类型是什么?

时间:2014-06-25 00:54:27

标签: f#

我想知道为什么F#编译器允许以下

type MyMath() =
 member this.Add a b = a + b

Add方法及其参数的类型是什么?如果我将它编译到库中并尝试在C#中使用它将会期望什么类型的参数?

对于类方法,F#是否要求您明确指定类型?

2 个答案:

答案 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