F#之间的区别是让add1 x = x + 1并让add2 x = x +1

jus*_*ive 13 f# types

let add1 x = x + 1和之间有什么区别let add2 x = x +1.意外删除的空间从改变的函数的类型
val add1 : x:int->int
val add2 : x:(int -> 'a) -> 'a

据我所知,第一种类型的声明说add1映射intint.但第二个是什么意思.

好吧,'a代表一个泛型类型,但该函数如何'add2'返回泛型?

谢谢你的帮助.

Fyo*_*kin 18

这是F#语法的一个怪癖:一个加号或减号后面紧跟一个数字文字分别被视为正数或负数,而不是作为运算符后跟数字.

> 42
it : int = 42

> +42
it : int = 42

> -42
it : int = -42
Run Code Online (Sandbox Code Playgroud)

所以你的第二个例子let add2 x = x +1相当于let add2 x = x 1.表达式x 1意味着它x是一个函数并且它被应用于参数1,这正是您的类型告诉您的:

add2 : x:(int -> 'a) -> 'a
Run Code Online (Sandbox Code Playgroud)

这表示add2接受一个名为的函数x,它接受int并返回一些函数'a,并且它add2本身也返回相同的函数'a.

  • 那只是一个错字.`let add2 =`而不是`let add2 x =`.纠正. (2认同)