Как использовать ** для показателей, использующих @infix func **()?
Я хочу использовать **
перегружать функцию экспоненты. Я работаю, если я использую что-то вроде "^", но Python делает **
и я хотел бы использовать это с Swift. Есть ли способ сделать это?
ошибка: реализация оператора без соответствующего объявления оператора
@infix func ** (num: Double, power: Double) -> Double{
return pow(num, power)
}
println(8.0**3.0) // Does not work
2 ответа
Решение
Вам необходимо объявить оператор перед определением функции следующим образом:
В Swift 2:
import Darwin
infix operator ** {}
func ** (num: Double, power: Double) -> Double {
return pow(num, power)
}
println(8.0 ** 3.0) // works
В Swift 3:
import Darwin
infix operator **
func ** (num: Double, power: Double) -> Double {
return pow(num, power)
}
print(8.0 ** 3.0) // works
Чтобы убедиться, что ** выполняется перед соседними * или /, лучше установить приоритет.
infix operator ** { associativity left precedence 160 }
Как показывает http://nshipster.com/swift-operators/, экспоненциальные операторы имеют приоритет 160, как и операторы побитового сдвига << и >>.