我想在+ 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
?
答案 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]