1
我想寫一個簡單的數組添加函數。唯一的複雜性來自於我試圖使其具有通用性。我知道在C#中,值類型沒有類型約束,但我的理解是F#可以使其與explicit member constraint一起工作。這裏是我的嘗試:通用數組缺失類型約束的總和
let Add<'T when 'T : (member (+) : 'T -> 'T -> 'T)> (A : 'T[]) (B : 'T[]) =
Array.init A.Length (fun i -> A.[i] + B.[i])
編譯器列出了三個錯誤:一個在A. [I],一個+號,一個是關於B. [I],但我的猜測是,他們都是一樣的:
A type parameter is missing a constraint
'when ^T : (static member (+) : ^T * ^T -> ^?6069)'
我確定這只是一個語法問題,任何人都可以指出我在正確的位置?
P.S:是有不同的/更簡單的方法來做到這一點,或者這是使它工作的正確方法?
太棒了!任何想法爲什麼編譯器不滿意我的版本? – vlad 2013-02-15 20:58:46
是的。顯式成員約束需要'inline'。 – Daniel 2013-02-15 20:59:45
無論我是否聲明函數「inline」,我都會得到相同的錯誤 – vlad 2013-02-15 21:00:31