Почему я не могу связать несколько вызовов инфиксных методов Scala
-
29-10-2019 - |
Вопрос
Я работаю над DSL, и у меня возникла проблема с использованием методов в качестве инфиксных операторов в цепочке.Я просто попытаюсь объяснить это с помощью кода.У меня есть черта Term
и классы case Literal
и Variable
, расширяющие его.Я хочу составить список экземпляров термина с помощью некоторых операторов.
Я ожидал, что это будет эквивалентно foo.bar("x").-->(all)
, но интерпретатор, похоже, видит это как foo.bar("x".-->(all))
.
Решение
Вы можете найти приоритет оператора здесь:
Согласно первому ответу, -
имеет более высокий приоритет по сравнению с буквами.Таким образом, компилятор группирует выражение следующим образом:
Если вы замените -->
чем-то с более низким приоритетом (например, буквами), он должен скомпилироваться.Например:
Вы также можете выбрать оператор с более высоким приоритетом вместо bar
.Что-то вроде ~~>
сделает это, потому что ~
является специальным символом и имеет наивысший приоритет: