隐式转换为方法?

时间:2014-12-19 13:13:14

标签: scala

如何在下面找到.to方法:

'a' to 'j'

这与:

相同
('a'.to('j'))   

但是在Char类上找不到.to方法?是否存在某种隐式转换?

2 个答案:

答案 0 :(得分:2)

如果您查看始终自动导入的scalaPredef对象,您会发现它扩展了包含

LowPriorityImplicits
@inline implicit def charWrapper(c: Char) = 
      new runtime.RichChar(c)

此方法会将您的Char转换为runtime.RichChar

RichChar在其中扩展了runtime.IntegralProxy[Char],其中包含方法:

def to(end: T): NumericRange.Inclusive[T] = 
      NumericRange.inclusive(self, end, num.one)

这就是你得到的。

如果你反编译你的代码,你会看到:

new RichChar(Predef..MODULE$.charWrapper('a'))
           .to(BoxesRunTime.boxToCharacter('j'));

答案 1 :(得分:0)

回答你的第一个问题 - 是的,两者都是一样的 2nd- .to方法是ScalaNumberProxy trait和.to的方法,它提供了immutable.NumericRange类型。 你可以检查 - val p =(' a'。(' j'))或val p =' a'到' j&#39 ; 知道p的类型