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