F add add1 x = x + 1和let add2 x = x +1之间的差异

时间:2018-06-29 00:50:04

标签: types f#

let add1 x = x + 1let add2 x = x +1有什么区别。空间的意外删除改变了功能的类型,从
    val add1 : x:int->int
    val add2 : x:(int -> 'a) -> 'a

据我了解,第一个类型语句说add1int映射到int上。但是第二个是什么意思。

好吧,'a代表泛型类型,但是函数'add2'如何返回泛型呢?

感谢您的帮助。

1 个答案:

答案 0 :(得分:18)

这是F#语法的古怪之处:紧随数字文字后的加号或减号分别被视为正数或负数,而不是运算符,后跟数字。

> 42
it : int = 42

> +42
it : int = 42

> -42
it : int = -42

因此,第二个示例let add2 x = x +1等效于let add2 x = x 1。表达式x 1表示x是一个函数,并将其应用于参数1,这正是您的类型告诉您的:

add2 : x:(int -> 'a) -> 'a

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