С тех пор scala.runtime. RichString объявляется как финал, Вы не можете расширить его как class MyString extends RichString
. Я хотел бы 'сутенеру библиотеку' и просто добавил бы другой метод. Как я сделал бы это?
Поскольку ключевым правилом имплицитов является то, что для проверки типа данного (под) выражения применяется только одно, то есть pimping RichString
, чтобы добавить в свою очередь в дополнение к методам, которые он добавляет к String
, не позволит вам видеть методы вашего RicherString
(если хотите) класса, как если бы они были доступны непосредственно в экземплярах String. Они были бы доступны, если бы у вас была RichString
, конечно, а экземпляры RichString
тривиально доступны из экземпляров String
с помощью простого описания типа.Но все же это не то, что кто-то назвал бы удобным.
Итак, с практической точки зрения то, о чем вы просите, в Scala невозможно.
С другой стороны, если вам просто нужно альтернативное расширение String
, вы можете просто определить свой собственный класс расширенных строк. Если между методами, которые он определяет, и методами, определенными в RichString, нет совпадения, компилятор никогда не сможет разрешить двусмысленность при принятии решения о том, какой из них применить. Вероятно, этого достаточно, не так ли?
Кроме того, этот подход (альтернативное не перекрывающееся неявное преобразование) не сломается, когда вы переключитесь на Scala 2.8, в котором вместо используется
. StringOps
RichString
Для этого вы должны сделать что-то вроде следующего:
class MyRichString(underlying:String){
def myNewMethod = { ... }
}
implicit def addMyMethods(s:String)=new MyRichString(s)