带参数约束的F#函数

时间:2009-06-04 00:23:23

标签: f#

我遇到类似于hubfs上的this论坛帖子的错误,这解决了我的问题,但却产生了关于该主题中代码的一些问题。

let test x = printfn "n"
let finall x = x : 'a -> unit
let i x = finall test x

有人可以向我解释第2行是完成的吗? 我看到finall的类型是

finall: ('a -> unit) -> ('a -> unit)

所以它只是一个函数,它接受一个函数并返回该函数。 第2和第3行的原因是什么? 您以后可以将函数体定义为finall吗? 看来你不必在第三行上调用括号,这是第2行的结果吗?

1 个答案:

答案 0 :(得分:3)

是的,该线程上的代码没有多大意义。 'finall'基本上是标识函数(let id x = x),除了它将其参数约束为函数返回单元而不是某个任意值。基本上它没有做任何有用的事情,你可以轻松编写

let test x = printfn "n"
let i x = test x

我希望这段代码可能来自于一个他们不理解的错误消息的人,并试图将其删除为一个小样本repro。

(关于函数调用,你永远不需要parens来调用F#中的let-bound函数:

f x

是一个调用,函数应用程序以正常方式工作以支持currying,这意味着

f x y

装置

(f x) y

这是'finall test x'行上发生的事情。)