我想像下面这样定义 [ Double ]
的 + function
。
[ 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 ]
有谁知道如何避免这种情况?或者与 Foundation framework
一起覆盖 +([ Double ],[ Double ])
是不可能的吗?
最佳答案
作为两个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]
关于swift - 重写 func +( [ Double ], [ Double ] ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51711718/