我写了一个简单的OCaml代码
let sum a b : int -> int -> int = a + b
我听说因为currying,这个函数的类型应该是int-> int-> int,但是我遇到了编译错误。
答案 0 :(得分:3)
冒号后,返回类型的函数。所以这将有效:
# let sum a b : int = a + b;;
val sum : int -> int -> int = <fun>
如您所见,完整类型为int -> int -> int
。
还有许多其他方法可以定义函数。一些例子:
您不需要提供任何类型;编译器会推断它们。
# let sum a b = a + b;;
val sum : int -> int -> int = <fun>
您可以给出每个参数的类型和结果类型:
# let sum (a: int) (b: int) : int = a + b;;
val sum : int -> int -> int = <fun>
如果您真的想要提供完整类型的功能,可以使用fun
的等效表格:
# let sum : int -> int -> int = fun a b -> a + b;;
val sum : int -> int -> int = <fun>
您也可以将自己的功能定义为+
的同义词:
# let sum : int -> int -> int = (+);;
val sum : int -> int -> int = <fun>
# let sum = (+);;
val sum : int -> int -> int = <fun>