由于scala.runtime.RichString被声明为final,因此无法对其进行扩展class MyString extends RichString.我想'皮条客图书馆',只需添加另一种方法.我该怎么做?
Ran*_*ulz 15
因为implicits的一个关键规则是只有一个被应用于进行给定(子)表达式类型检查,所以RichString为了添加它所添加的方法的补充,pimping 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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1689 次 |
| 最近记录: |