Так как ключевое правило имплицитов состоит в том, что только одна из них когда-либо применяется для проверки заданного (под-) выражения типа, pimping RichString
, чтобы добавить в свою очередь набор методов, добавляемых к String
не позволит вам видеть методы вашего класса RicherString
(если хотите), как если бы они были доступны непосредственно в экземплярах String. Конечно, они были бы доступны, если бы у вас было RichString
экземпляров, а RichString
экземпляров тривиально доступны из String
экземпляров простым указанием типа. Но все же, это не то, что кто-то назвал бы удобным.
Так что в практических целях то, о чем вы просите, в Scala на самом деле не возможно.
С другой стороны, если вам просто нужно альтернативное увеличение String
, вы можете просто определить свой собственный класс дополненной строки. Если нет совпадений между методами, которые он определяет, и методами, определенными в RichString, компилятору никогда не будет разрешена неопределенность при принятии решения о том, что применять. Это, наверное, достаточно хорошо, верно?
Кроме того, этот подход (альтернативное, не перекрывающееся неявное преобразование) не будет нарушен при переходе на Scala 2.8, в которой вместо 1011 *
вместо
RichString
.
Для этого вам нужно сделать что-то похожее на следующее:
class MyRichString(underlying:String){
def myNewMethod = { ... }
}
implicit def addMyMethods(s:String)=new MyRichString(s)