在Xcode 8 beta 6的Swift 3中有一个变化,现在我不能像以前那样声明我的操作符:
infix operator ^^ { }
public func ^^ (radix: Double, power: Double) -> Double {
return pow((radix), (power))
}
我读了一些关于它的内容,在Xcode 8 beta 6中引入了一个新的变化
从这个我猜我必须声明一个优先级组,并使用它为我的操作符,像这样:
precedencegroup ExponentiativePrecedence {}
infix operator ^^: ExponentiativePrecedence
public func ^^ (radix: Double, power: Double) -> Double {
return pow((radix), (power))
}
我走的方向对吗?我应该在优先级组的{}中放入什么?
我的最终目标是能够在swift中使用一个简单的操作符进行幂运算,例如:
10 ^^ -12
10 ^^ -24
您的代码已经编译并运行了—如果您只是单独使用操作符,则不需要定义优先关系或结合性,例如您给出的示例:
10 ^^ -12
10 ^^ -24
但是,如果您想使用其他操作符,以及将多个指数链接在一起,则需要定义高于MultiplicationPrecedence
的优先级关系和右结合律。
precedencegroup ExponentiativePrecedence {
associativity: right
higherThan: MultiplicationPrecedence
}
因此下面的表达式:
let x = 2 + 10 * 5 ^^ 2 ^^ 3
将被计算为:
let x = 2 + (10 * (5 ^^ (2 ^^ 3)))
// ^^ ^^ ^^--- Right associativity
// || --------- ExponentiativePrecedence > MultiplicationPrecedence
// --------------- MultiplicationPrecedence > AdditionPrecedence,
// as defined by the standard library
标准库优先级组的完整列表可在演进提案中获得。