2009-06-04 91 views
1

我碰到类似于hubfs上的this论坛帖子的错误,它解决了我的问题,但生成了关于该线程中代码的一些问题。具有参数约束的F#函数

 
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行的结果吗?

回答

3

是的,该线程上的代码没有多大意义。 'finall'基本上是标识函数(让id x = x),除了它将其参数限制为函数返回单元而不是某个任意值。基本上,它不会做任何有用的东西,你可以很容易地编写

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

我希望这个片断也许从别人谁与他们不明白的错误消息开始传来,并试图剥夺它下降到一个微小的样本重现。

(关于函数调用,你永远不需要括号调用让绑定功能在F#:

f x 

是通话,功能应用上以正常的方式来支持钻营,这意味着

工作
f x y 

意味着

(f x) y 

而这一点正是对 'finall测试X' 林发生e。)

+0

谢谢,多数民众赞成我正在寻找! – Jake 2009-06-04 00:38:05