2011-06-20 37 views
6

我是scala的新手。我試着寫一個函數是「重複」的Array(斯卡拉2.9.0):斯卡拉重複陣列

def repeat[V](original: Array[V],times:Int):Array[V]= { 
if (times==0) 
    Array[V]() 
else 
    Array.concat(original,repeat(original,times-1) 
} 

但我不能編譯這個(獲得有關manifest錯誤)......

回答

6

你要問編譯器提供一流的艙單V

def repeat[V : Manifest](original: Array[V], times: Int): Array[V] = ... 

答案的問題:爲什麼需要,您可以在這裏找到:

Why is ClassManifest needed with Array but not List?

我不確定要使用它的位置,但我通常可以推薦您使用List或其他合適的集合,而不是Array

+0

我想延長需要數組作爲輸入(一類更具體的來自scalala的DenseMatrix類)。那裏(@specialized)數字類型隱式轉換爲'標量'。但你總是需要給整個陣列。我想要一個接近'R'的方法,即當陣列不具備所需的長度時,只需重複並可能將其切割以使其適合... – teucer

5

順便說一句,以另一種方式重複陣列,將「填充」一個Seq與陣列的引用,然後弄平的是:

def repeat[V: Manifest](original: Array[V], times: Int) : Array[V] = 
    Seq.fill(times)(original).flatten.toArray;