12

我想用来**重载指数函数。如果我使用“^”之类的东西,我会工作,但 python 的做法是**,我想将它与 Swift 一起使用。有什么办法吗?

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

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

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

2 回答 2

36

定义函数前需要先声明操作符,如下:

在斯威夫特 2 中:

import Darwin

infix operator ** {}

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

println(8.0 ** 3.0) // works

在斯威夫特 3 中:

import Darwin

infix operator **

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

print(8.0 ** 3.0) // works
于 2014-06-06T15:00:29.907 回答
4

为了确保 ** 在相邻的 * 或 / 之前执行,您最好设置一个优先级。

infix operator ** { associativity left precedence 160 }

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

于 2015-01-28T22:45:15.093 回答