2

我是 Scala 新手,我注意到一种我不理解的行为。当我执行这段代码时,一切都很好:

val lD: List[Double] = List(1, 2, 3)

但是,当我执行这个时:

val lI = List(1, 2, 3)
val lD: List[Double] = lI

我收到一个错误

<console>:11: error: type mismatch;
 found   : List[Int]
 required: List[Double]

您能否给我一个线索,为什么在第二个清单中没有进行隐式转换?

4

2 回答 2

8

没有定义从 List[Int] 到 List[Double] 的隐式转换,尽管如果你真的想要一个,你可以做一个。请参阅以下内容:

Welcome to Scala version 2.9.1.final (Java HotSpot(TM) 64-Bit Server VM, Java 1.6.0_37).
Type in expressions to have them evaluated.
Type :help for more information.

scala> val i = 1
i: Int = 1

scala> val d: Double = i
d: Double = 1.0

scala> val il = List(1,2,3,4)
il: List[Int] = List(1, 2, 3, 4)

scala> val dl: List[Double] = il
<console>:8: error: type mismatch;
 found   : List[Int]
 required: List[Double]
       val dl: List[Double] = il
                              ^

scala> object il2dl { implicit def intlist2dlist(il: List[Int]): List[Double] = il.map(_.toDouble) }
defined module il2dl

scala> import il2dl._
import il2dl._

scala> val dl: List[Double] = il
dl: List[Double] = List(1.0, 2.0, 3.0, 4.0)

scala> 
于 2012-12-27T20:53:30.287 回答
4

只需将 List[Int] 显式转换为 List[Double] 即可:

val lI = List(1, 2, 3)
val lD: List[Double] = lI map (_.toDouble)
于 2012-12-27T21:09:14.820 回答