¿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 .