Как отменить импорт оператора "+" в Scala? - PullRequest
13 голосов
/ 19 апреля 2010

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

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

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

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

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

  • Удалить (не импортировать в моей области видимости) определение "+" из строк
  • Определение неявного преобразования строки в Int

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

Спасибо

Ответы [ 3 ]

9 голосов
/ 19 апреля 2010

Согласно разделу 12.3.1 спецификации Scala , метод + для String имеет особую обработку компилятором. Я не знаю наверняка, но я думаю, что это означает, что вы не можете «импортировать» это, что является позором, потому что это действительно нарушает систему типов (очень похоже на связанный toString метод).

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

3 голосов
/ 19 апреля 2010

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

1 голос
/ 10 марта 2011

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

...