覆盖函数+([Double],[Double])

时间:2018-08-06 16:10:15

标签: swift foundation

我想在+ function中定义[ Double ],如下所示。

[ 2.0, 3.0, 4.0 ] + [ 5.0, 6.0, 7.0 ] -> [ 7.0, 9.0, 11.0 ]

因此,我如下定义了+ function

func +( _ l: [ Double ], _ r: [ Double ] ) -> [ Double ] {
    guard l.count == r.count else { fatalError() }
    var v = [ Double ]( repeating: 0, count: l.count )

    // Some adding operation

    return v
}

除非没有Foundation框架,否则它可以工作。

但是当我包含Foundation框架时,似乎在Foundation框架+( Array, Array )中已经定义了。因此,

[ 2.0, 3.0, 4.0 ] + [ 5.0, 6.0, 7.0 ]

获取

[ 2.0, 3.0, 4.0, 5.0, 6.0, 7.0 ]

有人知道如何避免这种情况吗?还是无法与+([ Double ],[ Double ])一起覆盖Foundation framework

1 个答案:

答案 0 :(得分:2)

由于两个+操作数的Array已经是reserved for concatenating arrays,因此您必须诉诸声明自己的infix运算符。例如。 ~+

import Accelerate

infix operator ~+

func ~+( _ l: [ Double ], _ r: [ Double ] ) -> [ Double ] {
    guard l.count == r.count else { fatalError() }
    var v = [ Double ]( repeating: 0, count: l.count )
    vDSP_vaddD( l, 1, r, 1, &v, 1, vDSP_Length( v.count ) )
    return v
}

print([ 2.0, 3.0, 4.0 ] ~+ [ 5.0, 6.0, 7.0 ]) // [7.0, 9.0, 11.0]