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