如何在Swift 3中使用新的优先级组声明指数/幂运算符



在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

标准库优先级组的完整列表可在演进提案中获得。

相关内容

  • 没有找到相关文章

最新更新