关于隐式转换的问题
davepkxxx
2012-01-19
我在scala中写了一个
object StringUtils { implicit def rachString(s: String) = new { def substr(end: Int) = s.substring(0, end) } }
如何让其他类可以使用这个新增的方法?
我试过几个都失败了,无法通过编译。
import StringUtils
import StringUtils._ |
|
mwei
2012-01-19
-----------------------------------------------------------------
C:\Users\Root>scala Welcome to Scala version 2.9.1.final (Java HotSpot(TM) Client VM, Java 1.6.0_26). Type in expressions to have them evaluated. Type :help for more information. scala>object StringUtils { |implicit def rachString(s: String) = new { | def substr(end: Int) = s.substring(0, end) |} |} defined module StringUtils scala> import StringUtils._ import StringUtils._ scala> "abc".substr(1); res0: java.lang.String = a ----------------------------------------------------------------- scala> "abc".substr(1); 执行这一句的时候,由于String对象没有substr方法,Scala解释器就会到执行的上下文里找一个隐式函数,什么样的隐式函数呢,一个可以把String对象转换为带有substr方法的对象。 由于开始时已经导入了相关隐式函数(scala> import StringUtils._),就能在上下文里找到这样一个隐式函数rachString,rachString负责把String对象转换为带有substr方法的匿名类对象;所以["abc".substr(1);]能被成功解释。 rachString函数不需要显示调用(如 yourObj.rachString(blah..)),否则怎对得起[隐式函数]这个名字? --有段时间没看Scala了,望指正 --------------------------------------------------------------------- |