2009-06-04 125 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