Как 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
Я застрял на первом шаге.
Спасибо
Ответы
Ответ 1
В соответствии с разделом 12.3.1 Scala spec метод +
для String
имеет специальное обращение с помощью компилятор. Я не знаю точно, но я думаю, что это означает, что вы не можете "unimport" его, что является позором, потому что он действительно разбивает систему типов (подобно методу toString
).
Можете ли вы использовать другое имя для оператора в вашей DSL, например, ++
или &
?
Ответ 2
Метод + для метода - это метод класса String (и, следовательно, для каждого строкового объекта), и поэтому он не может быть unimported.
Ответ 3
Вы не можете его unimport, но вы можете использовать +: и определить его в классе int. Что было бы лучше, если вы напишете это так: "2".toInt + 3.