由於我需要花費很多時間來關注一下,所以我建立了一個一次性使用函數列表和一個傳遞函數來添加項目作爲一個側面效果:類型推理會產生不必要的約束
let mutable disposables = []
let (~-) (x:'a) = disposables <- x :: disposables; x
所以,我希望能做到這一點:
let thing1 = -new Form()
let thing2 = -new Control()
for i in disposables do i.Dispose()
的問題是,F#自動限制'a
到IDisposable
,與報警信息:
此構造使得代碼不如類型註釋所指示的通用。類型變量'a被限制爲'IDisposable'類型。
那麼返回類型operator ~-
就變成了IDisposable,這就損害了函數的方便性。
有沒有辦法阻止F#創建這個約束?
如果「一次性」是「IDisposable」的列表,那麼'x'可以是「IDisposable」本身嗎?無論如何,你可能會給「一次性」一個明確的類型,看看你得到了什麼 - 我是一個Haskeller,所以這只是猜測。 – 2012-07-28 01:01:43
做內聯(〜 - )(x:'a)=一次性< - x ::一次性; x'解決這個問題? – 2012-07-28 01:07:52
@JohnPalmer Nope,'本地類綁定不能標記爲內聯。考慮將定義從類中提取出來,否則不要將其標記爲內聯。 – 2012-07-28 01:09:05