2

我无意中注意到以下内容:

scala> class g[T](val x:T)   
defined class g

scala> val obj=new g[Int]('A')
obj: g[Int] = g@1082d45

scala> obj.x
res6: Int = 65

这里发生了什么?类型转换?

4

2 回答 2

2

这是原语的上转换。如果需要的话,原始值会将自己转换为下一个数值更大的类型。所以val s: Short = (0: Byte)有效。没有任何东西可以转换为Char, 但Char会变成Int, Long, Float, 或者Double如果它需要是正确的参数类型。

这样做的原因主要是因为它是 Java 的做法,但部分是因为出错val d: Double = 0真的很烦人,因为0当然适合 aDouble没有任何问题,而且类型也没有歧义。

于 2012-10-17T21:40:53.320 回答
2

也可以看看:

https://github.com/scala/scala/blob/1c8add14605c4c6e818693d0d9c653407ab69837/src/library/scala/Predef.scala#L319

默认情况下启用以下隐式转换。

implicit def char2int(x: Char): Int = x.toInt

在这种情况下,预期的类型是Int。所以Char值被转换。

于 2012-10-18T07:32:10.433 回答