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

以下も参照してください。

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 に答える
2

プリミティブのアップコンバートです。プリミティブ値は、必要に応じて、数値的に次に大きい型に変換されます。だからval s: Short = (0: Byte)うまくいく。に変換されるものはありませんCharが、正しい引数の型である必要がある場合は、、、、またはになりCharます。IntLongFloatDouble

これが行われる理由は、主に Java のやり方によるものですが、一部にはエラーを取り除くのval d: Double = 0が本当に面倒なためです。もちろん、まったく問題なく0に適合し、型についてもあいまいさがないからです。Double

于 2012-10-17T21:40:53.320 に答える