我遇到类似于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行的结果吗?
答案 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'行上发生的事情。)