有没有办法扩展Scala的RichString?

时间:2010-06-20 23:20:40

标签: string scala

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

1 个答案:

答案 0 :(得分:15)

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

因此,出于实际目的,在Scala中您所要求的内容实际上是不可能的。

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

此外,当您切换到Scala 2.8时,此方法(替代的,非重叠的隐式转换)不会中断,其中String代替StringOps

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

RichString