我正在尝试编写一个简单的数组添加函数。唯一的复杂性来自我试图使其通用的尝试。我知道在 C# 中值类型没有类型约束,但我的理解是 F# 可以使其与显式成员约束一起工作。这是我的尝试:
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)'
我确定这只是一个语法问题,谁能指出我正确的地方?
ps:有没有不同/更简单的方法可以做到这一点,或者这是让它工作的正确方法?