使用`**`作为指数运算符在swift中使用`-`运算符错误地工作

时间:2015-04-20 15:50:23

标签: swift operator-overloading

如何使Swift中的取幂运算符**与其他编程语言中的指数运算符相同。

问题Exponentiation operator in Swift有以下答案,其票数最高,

infix operator ** { associativity left precedence 170 }

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

然而,y = -x**2

  • 被解释为(-x)**2 = 4.0(Swift)
  • 通常应将其解释为-(x**2) = -4.0(预期!)

1 个答案:

答案 0 :(得分:1)

我相信你的问题是:

  

Swift中的一元运算符总是优先于二元运算符。

以下是来源:https://medium.com/swift-programming/facets-of-swift-part-5-custom-operators-1080bc78ccc

因此,表达式始终评估为(-x)**2而不是-(x**2),因为-是一元运算符,**是二元运算符。