如何使用**作为使用@infix func **()的指数?

时间:2014-06-06 14:53:00

标签: swift operators infix-operator

我想使用**来重载指数函数。如果我使用" ^"但是python的做法是**,我想把它用在Swift上。有办法吗?

  

错误:没有匹配运算符声明的运算符实现

@infix func ** (num: Double, power: Double) -> Double{
    return pow(num, power)
}

println(8.0**3.0) // Does not work

2 个答案:

答案 0 :(得分:29)

您需要在定义函数之前声明运算符,如下所示:

在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

答案 1 :(得分:4)

要确保在邻居*或/之前执行**,您最好设置优先级。

infix operator ** { associativity left precedence 160 }

http://nshipster.com/swift-operators/所示,指数运算符有160个优先级,如<<和>>按位移位运算符。