There's been a change in Swift 3 for Xcode 8 beta 6 and now I'm not able to declare my operator for power as I did before:
infix operator ^^ { }
public func ^^ (radix: Double, power: Double) -> Double {
return pow((radix), (power))
}
I've read a bit about it and there's a new change been introduced in Xcode 8 beta 6
From this I'm guessing I have to declare a precedence group and use it for my operator like this:
precedencegroup ExponentiativePrecedence {}
infix operator ^^: ExponentiativePrecedence
public func ^^ (radix: Double, power: Double) -> Double {
return pow((radix), (power))
}
Am I going in the right direction to make this work? What should I put inside the {} of the precedence group?
My final aim is to be able to make power operations with a simple operator in swift, e.g.:
10 ^^ -12
10 ^^ -24
Your code already compiles and runs – you don't need to define a precedence relationship or an associativity if you're simply using the operator in isolation, such as in the example you gave:
10 ^^ -12
10 ^^ -24
However, if you want to work with other operators, as well as chaining together multiple exponents, you'll want to define a precedence relationship that's higher than the MultiplicationPrecedence
and a right associativity.
precedencegroup ExponentiativePrecedence {
associativity: right
higherThan: MultiplicationPrecedence
}
Therefore the following expression:
let x = 2 + 10 * 5 ^^ 2 ^^ 3
will be evaluated as:
let x = 2 + (10 * (5 ^^ (2 ^^ 3)))
// ^^ ^^ ^^--- Right associativity
// || \--------- ExponentiativePrecedence > MultiplicationPrecedence
// \--------------- MultiplicationPrecedence > AdditionPrecedence,
// as defined by the standard library
The full list of standard library precedence groups is available on the evolution proposal.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With