【发布时间】:2016-04-26 14:34:07
【问题描述】:
我想定义一个新的运算符,将数组[Int]的每个元素乘以Int,比如[3, 2, 10] * 10。
但是,因为Int既不是协议也不是类(它是结构体),所以我首先定义了以下内容:
protocol Numeric {}
extension Int: Numeric {}
extension Double: Numeric {}
extension Float: Numeric {}
然后,我尝试定义运算符,例如:
func *<T: Numeric> (left: [T], right: T) -> [T] {
var newArray: [T] = []
for i in left {
newArray.append(i * right)
}
return newArray
}
但是,这会吐出一个错误:Cannot convert value of type 'T' to expected argument type '[_]'。
我不确定[_] 的类型是什么意思,我不期望,但我想问题出在我没有定义一个接受@987654331 的运算符@ 和T,在这种情况下都是Numeric。
所以我定义了另一个运算符,比如:
func *<T: Numeric> (left: T, right: T) -> T {
return left * right
}
然而,虽然这已经编译没有问题,运行时错误发生了很多很多static * infix <A where ...> (A, A) -> A。
我不确定为什么这个操作符被执行了这么多次,但现在我想知道是否可以首先定义一个自定义的* 操作符,尽管Int 确实已经有* 操作符已定义。
那么在 Swift 中是否还可以定义 [Int] * Int 运算符?
【问题讨论】:
标签: swift operator-overloading operators