default
C#のキーワードを真似してみました:
private class Default[T] {
private var default : T = _
def get = default
}
次に、パッケージ オブジェクトで次のように定義します。
def default[T] = new Default[T].get
と思っdefault[Int]
ていましたが0
、
println(default[String])
println(default[Int])
println(default[Double])
println(default[Boolean])
すべてのプリントnull
。でも
val x = default[Int]
println(x)
印刷し0
ます。型注釈を追加すると、: Any
再びx
印刷null
されます。
同じタイプの引数がそこで起こっていることprintln
を期待しているので、私は推測しています。Any
より一般的な型の変数に式を代入すると、その式の値が変わる可能性があるのはどうしてですか? 私はそれが本当に直観に反していると思います。
ボクシングと何か関係があるので、実際には2つの異なるdefault
関数を呼び出しています(一度はプリミティブint
で、一度はでInteger
)? はいの場合、それを回避する方法はありますか?