我試圖immitate的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
的參數在那裏也是如此。
如何將表達式分配給更一般類型的變量可能會更改該表達式的值?我發現這真的是違反直覺的。
它與拳擊有什麼關係,所以我實際上調用了兩個不同的default
函數(一次用原始的int
,一次用Integer
)?如果是,有沒有辦法避免這種情況?
'def default [T]:T = null.asInstanceOf [T]'更短。 – senia 2013-05-08 08:50:17
有趣的是,嘗試'私有val默認值:T = _'會產生錯誤:未綁定的佔位符參數。 – 2013-05-08 08:50:47
@senia:對於'Boolean',不會總是'null'而不是'0',例如'Int'或'false'? – 2013-05-08 08:51:41