たまたま次のことに気がつきました。
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
ここで何が起きてるの?タイプキャスト?
たまたま次のことに気がつきました。
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
ここで何が起きてるの?タイプキャスト?
以下も参照してください。
次の暗黙的な変換は、デフォルトで有効になっています。
implicit def char2int(x: Char): Int = x.toInt
この場合、予想されるタイプはInt
です。したがって、Char
値が変換されます。
プリミティブのアップコンバートです。プリミティブ値は、必要に応じて、数値的に次に大きい型に変換されます。だからval s: Short = (0: Byte)
うまくいく。に変換されるものはありませんChar
が、正しい引数の型である必要がある場合は、、、、またはになりChar
ます。Int
Long
Float
Double
これが行われる理由は、主に Java のやり方によるものですが、一部にはエラーを取り除くのval d: Double = 0
が本当に面倒なためです。もちろん、まったく問題なく0
に適合し、型についてもあいまいさがないからです。Double