Подтвердить что ты не робот

Как unimport оператор String "+" в Scala?

Я пишу DSL, где оператор "+" строго числен, как и некоторые другие популярные языки. Он близок, но оператор String "+" испортил мои неявные преобразования. Какой синтаксис для unimporting оператора класса String?

Просто чтобы быть более ясным, вместо этого:

scala> var x = "2" + 3;
x: java.lang.String = 23

Я хотел бы получить x: Int = 5

Полагаю, мне просто нужно сделать 2 вещи, чтобы это произошло:

  • Удалить (unimport in my scope) определение "+" из строк
  • Определить неявное преобразование String в Int

Я застрял на первом шаге.

Спасибо

4b9b3361

Ответ 1

В соответствии с разделом 12.3.1 Scala spec метод + для String имеет специальное обращение с помощью компилятор. Я не знаю точно, но я думаю, что это означает, что вы не можете "unimport" его, что является позором, потому что он действительно разбивает систему типов (подобно методу toString).

Можете ли вы использовать другое имя для оператора в вашей DSL, например, ++ или &?

Ответ 2

Метод + для метода - это метод класса String (и, следовательно, для каждого строкового объекта), и поэтому он не может быть unimported.

Ответ 3

Вы не можете его unimport, но вы можете использовать +: и определить его в классе int. Что было бы лучше, если вы напишете это так: "2".toInt + 3.