20.0 Scala隐式转换和隐式参数

2016-05-08 13:14:03 1,068 0

隐式转换隐式参数是Scala两个强大的工具,用于丰富现有类的功能。

1、隐式转换简介

隐式转换用于在类型之间做转换。例如将A类型转换成B类型。

举例来说,我们知道Scala中的Int类型的值可以直接调用to方法。如:

scala> 1 to 10
res0: scala.collection.immutable.Range.Inclusive = Range(1, 2, 3, 4, 5, 6, 7, 8,9, 10)

但是在Int类的源码中并没有直接定义to方法(读者可以自行查看源码)。实际上to方法是在RichInt类中定义的。Int值1首先会被转换成RichInt,然后再应用to方法。

这里我们我们需要考虑两个问题:

1、scala怎么知道要进行隐式转换?

答:当调用一个类的不存在的方法时,scala会尝试进行隐式转换(隐式转换有三种场景,这只是其中一种场景)。

2、scala怎么知道将Int类型自动转换成RichInt类型,而不是其他类型?

这是通过一个隐式转换函数来完成的。我们可以自己定义隐式转换函数,因此我们当然可以将源类型A其转换成任何我们想要的目标类型B。 

上一篇:1.0 Scala简介 下一篇:20.1 隐式转换规则