有没有办法扩展Scala的RichString?

pr1*_*001 8 string scala

由于scala.runtime.RichString被声明为final,因此无法对其进行扩展class MyString extends RichString.我想'皮条客图书馆',只需添加另一种方法.我该怎么做?

Ran*_*ulz 15

因为implicits的一个关键规则是只有一个被应用于进行给定(子)表达式类型检查,所以RichString为了添加它所添加的方法的补充,pimping String将不允许你看到您的RicherString(如果愿意)类,就好像它们可以直接在String实例上使用一样.RichString当然,如果你有一个,它们将是可用的,并且通过简单类型归属RichStringString实例中可以轻易地获得实例.但是,这并不是任何人所说的方便.

因此,出于实际目的,在Scala中你真正需要的是什么.

另一方面,如果您只需要替代扩充String,则可以定义自己的扩充字符串类.如果它定义的方法与RichString中定义的方法之间没有重叠,那么编译器在决定应用哪个方法时决不会有任何歧义.这可能足够好了,对吗?

此外,当切换到Scala的2.8,其具有这种方法(替代的,不重叠的隐式转换)不会打破StringOps代替RichString.

为此,您将执行类似于以下操作:

class MyRichString(underlying:String){
  def myNewMethod = { ... }
}

implicit def addMyMethods(s:String)=new MyRichString(s)
Run Code Online (Sandbox Code Playgroud)