Почему я не могу связать несколько вызовов инфиксных методов Scala

StackOverflow https://stackoverflow.com/questions/5904038

  •  29-10-2019
  •  | 
  •  

Вопрос

Я работаю над DSL, и у меня возникла проблема с использованием методов в качестве инфиксных операторов в цепочке.Я просто попытаюсь объяснить это с помощью кода.У меня есть черта Term и классы case Literal и Variable, расширяющие его.Я хочу составить список экземпляров термина с помощью некоторых операторов.

общий

Я ожидал, что это будет эквивалентно foo.bar("x").-->(all), но интерпретатор, похоже, видит это как foo.bar("x".-->(all)).

Это было полезно?

Решение

Вы можете найти приоритет оператора здесь:

Приоритет оператора в Scala

Согласно первому ответу, - имеет более высокий приоритет по сравнению с буквами.Таким образом, компилятор группирует выражение следующим образом:

общий

Если вы замените --> чем-то с более низким приоритетом (например, буквами), он должен скомпилироваться.Например:

общий

Вы также можете выбрать оператор с более высоким приоритетом вместо bar.Что-то вроде ~~> сделает это, потому что ~ является специальным символом и имеет наивысший приоритет:

общий
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top