这是关于优先级分组迅速的错误吗?

时间:2019-06-19 12:27:23

标签: swift operator-precedence

我很快发现了一个关于自定义优先级组的有趣或困惑的问题。

这是macOS Mojave 10.14.5下具有Xcode 10.2.1的Swift 5.0.1

precedencegroup PowerPrecedence {
    lowerThan: BitwiseShiftPrecedence
    higherThan: AdditionPrecedence
    associativity: right
}
infix operator ^^ : PowerPrecedence

extension Int {
    static func ^^ (lhs: Int, rhs: Int) -> Int {
        var result = 1
        for _ in 1...rhs { result *= lhs }
        return result
    }
}
print(3 ^^ 2 * 3)
print(2 ^^ 2 ^^ 2 * 2)


我设置了PowerPrecedence的优先级,该优先级是有意与MultiplicationPrecedence进行比较的。

“ print(3 ^^ 2 * 3)”行引起编译器的抱怨: “相邻的运算符在无序优先级组'PowerPrecedence'和'MultiplicationPrecedence'中” 这就是我所期望的。

但是,如果我在此行中添加注释,则下一行“ print(2 ^^ 2 ^^ 2 * 2)”输出32。这行不应该产生与上一行相同的错误吗?这是Swift中的错误吗?

如果在PowerPrecedence的定义中将“关联性”更改为“左”,则两行均指示“相邻运算符位于无序优先级组中……”错误。

0 个答案:

没有答案