swift swift3 operator-precedence xcode8-beta6

¿Cómo declarar exponente/operador de poder con nuevo grupo de precedencia en Swift 3?



swift3 operator-precedence (1)

Ha habido un cambio en Swift 3 para Xcode 8 beta 6 y ahora no puedo declarar mi operador como antes:

infix operator ^^ { } public func ^^ (radix: Double, power: Double) -> Double { return pow((radix), (power)) }

He leído un poco al respecto y se ha introducido un nuevo cambio en Xcode 8 beta 6

A partir de esto, supongo que tengo que declarar un grupo de precedencia y usarlo para mi operador de esta manera:

precedencegroup ExponentiativePrecedence {} infix operator ^^: ExponentiativePrecedence public func ^^ (radix: Double, power: Double) -> Double { return pow((radix), (power)) }

¿Voy en la dirección correcta para que esto funcione? ¿Qué debería poner dentro del {} del grupo de precedencia?

Mi objetivo final es poder realizar operaciones de potencia con un simple operador en forma rápida, por ejemplo:

10 ^^ -12 10 ^^ -24


Su código ya se compila y se ejecuta; no es necesario definir una relación de precedencia o asociatividad si solo está utilizando el operador de forma aislada, como en el ejemplo que proporcionó:

10 ^^ -12 10 ^^ -24

Sin embargo, si desea trabajar con otros operadores, así como encadenar múltiples exponentes, querrá definir una relación de precedencia que sea más alta que MultiplicationPrecedence y una asociatividad correcta .

precedencegroup ExponentiativePrecedence { associativity: right higherThan: MultiplicationPrecedence }

Por lo tanto, la siguiente expresión:

let x = 2 + 10 * 5 ^^ 2 ^^ 3

será evaluado como:

let x = 2 + (10 * (5 ^^ (2 ^^ 3))) // ^^ ^^ ^^--- Right associativity // || /--------- ExponentiativePrecedence > MultiplicationPrecedence // /--------------- MultiplicationPrecedence > AdditionPrecedence, // as defined by the standard library

La lista completa de grupos de precedencia de biblioteca estándar está disponible en la propuesta de evolución .