2013-06-04 40 views
1

假設我有以下代碼如何在Scala中創建對象列表(即單例)?

trait T 

object O extends T 

現在假設我想創建一個大小爲10的List[T],由O. 填充換句話說,列表看起來應該像(O, O, O,..., O)

試圖按照通常的斯卡拉方式(1 until 10) map (x => O) toList創建一個List[O.type]

謝謝。

+1

我不知道我理解這個問題。代碼'val list:List [T] =(1至10)map(x => O)toList'適合我。此外,'List.fill(10)(O)'可能更整潔... – cmbaxter

+0

它正確地創建列表。列表[O.type]是結果列表的類型,而不是列表本身。 –

回答

4

的問題是,斯卡拉推斷的最具體類型。在你的情況下,O對象的具體類型:O.type。所以你需要精確的類型。

順便說一句,TT不是階的方式做到這一點,這是更好地做:

List.fill(10)(O) 

但它不會產生任何List[T]。所以你需要做的:

List.fill[T](10)(O) 
3

顯式指定類型:

val l: List[T] = (1 until 10) map (x => O) toList