F#扩展约束数组

时间:2019-03-05 02:43:51

标签: generics f# extension-methods generic-programming

说我有以下代码段

new Function

希望很明显,我只想在'T支持type 'T``[]`` when 'T : (static member (+) : 'T -> 'T -> 'T) with member inline self.sum = Array.fold ( + ) self 运算符时添加扩展方法。

但是,我不断遇到以下错误:

+

这种扩展方法是否可能?如果是,我想念什么?

1 个答案:

答案 0 :(得分:2)

我能想到的最好的是

type 'T``[]`` with
    member inline this.mysum< ^T when ^T : (static member (+) : ^T * ^T -> ^T)>() = 
        Array.reduce (fun v1 v2 -> (^T : (static member (+): ^T * ^T -> ^T)  (v1, v2)))

仍然不起作用(至少在FSI中-尚未尝试编译)。我不确定这是否可能。

相反,我建议您在IEnumerable<_>中使用System.Linq扩展方法:

open System.Linq
[| 1..10 |].Sum()