参数化类型将Char转换为Int

时间:2012-10-17 21:34:09

标签: scala

我不小心注意到以下情况:

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

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

2 个答案:

答案 0 :(得分:2)

它是基元的上转换。如果看起来需要,原始值将自身转换为下一个数字更大的类型。所以val s: Short = (0: Byte)有效。没有任何内容会转换为Char,但Char会成为IntLongFloatDouble,如果它需要是正确的话参数类型。

这样做的原因主要是因为Java就是这样做的,但部分是因为从val d: Double = 0获取错误真的很烦人,因为0当然适合于Double没有任何问题,也没有关于类型的歧义。

答案 1 :(得分:2)

另见:

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

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

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

在这种情况下,预期类型为Int。因此转换Char值。