我想從現有的Seq集合中創建一個新的自定義Scala集合。我有一個名爲價性狀,其保持數據,如下命名VEC在Scala中創建自定義Seq集合
trait Ref[A] {
def get: A
def getAsOption: Option[A]
def dataType: Class[A]
// other methods
}
我的自定義集合,其是參考序列[A](即VEC [A]等同於Seq [參考文獻[A]]),我想創建一個像這樣的自定義集合的原因是因爲我想讓集合中的Ref的類型參數在自定義方法中處理。我的代碼如下
trait VecLike[A, +Repr <: Seq[Ref[A]]]
extends SeqLike[Ref[A], Repr]
with TraversableLike[Ref[A], Repr] {
// custom methods
}
trait GenVec[A]
extends VecLike[A, Seq[Ref[A]]]
with Seq[Ref[A]]
with PartialFunction[Int, Ref[A]]
abstract class AbstractVec[A](vec: Ref[A]*)
extends AbstractSeq[Ref[A]]
with GenVec[A] {...}
class Vec(vec: Ref[A]*)
extends AbstractVec[A](vec:_*)
with VecLike[A, Vec[A]]
with GenericTraversableTemplate[Ref[A], Seq]
但是當我打電話map()函數
Vec(1,2,3,4).map(intToString)
它返回一個序列[字符串],該預期的結果VEC [字符串。我也試着用SeqFactory [Seq]在伴隨對象中創建自定義的CanBuildFrom,但失敗了。 :(:(
誰能給我這件事,我怎麼執行實現這一目標提出了一些建議?
我會欣賞這個評論的作者,然後意識到這是@Dima。真是巧合?哦,這是這個問題的最佳答案。 –