接受F#函数的函数

sdg*_*sdh 1 lambda f#

我想创建一个接受两个值和一个函数的函数.我无法理解语法,所以我做了一个最小的例子:

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)

怎么写呢?

Dav*_*haw 6

你应该这样调用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)创建元组一样,当你不需要时.