let add1 x = x + 1
和let add2 x = x +1
有什么区别。空间的意外删除改变了功能的类型,从
val add1 : x:int->int
到
val add2 : x:(int -> 'a) -> 'a
据我了解,第一个类型语句说add1
将int
映射到int
上。但是第二个是什么意思。
好吧,'a
代表泛型类型,但是函数'add2'
如何返回泛型呢?
感谢您的帮助。
答案 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
。