我想创建一个接受两个值和一个函数的函数.我无法理解语法,所以我做了一个最小的例子:
let foo (x : int, y : int, func : int -> int -> int) =
func(x, y)
Run Code Online (Sandbox Code Playgroud)
预期输出:
> foo(2, 3, fun x y -> x + y)
5
Run Code Online (Sandbox Code Playgroud)
但是我得到了编译错误:
The expression was expected to have type int, but here has type 'a * 'b
Run Code Online (Sandbox Code Playgroud)
怎么写呢?
你应该这样调用func传递args
func x y
Run Code Online (Sandbox Code Playgroud)
使用类似于C类语言的parens会创建一个元组,就是这样'a * 'b.
当你声明/调用foo时,你也使用元组.
你可以这样做
let foo x y f =
f x y
Run Code Online (Sandbox Code Playgroud)
让类型推断算出来.把东西放在括号中就像(x, y)创建元组一样,当你不需要时.