Это ошибка в группе приоритетов в swift? - PullRequest
0 голосов
/ 19 июня 2019

Я обнаружил интригующую или запутанную проблему с пользовательской группой приоритетов в swift.

Это Swift 5.0.1 с Xcode 10.2.1 под macOS Mojave 10.14.5

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, обе строки указывают на ошибку «Смежные операторы находятся в неупорядоченных группах приоритетов ...».

...