既存のSeqコレクションから新しいカスタムScalaコレクションを作成したいと思います。私は ScalaでカスタムSeqコレクションを作成
trait Ref[A] {
def get: A
def getAsOption: Option[A]
def dataType: Class[A]
// other methods
}
以下の文献のシーケンスであるVecと命名マイカスタムコレクション[A](配列へつまりVecと[A]相当[参照[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]
以下のようにコードしかし、私はそれが配列[文字列]を返す
Vec(1,2,3,4).map(intToString)
マップ()関数を呼び出すときに、期待される結果がVecを[文字列]です。私はSeqFactory [Seq]でコンパニオンオブジェクトでカスタムCanBuildFromを作成しようとしましたが失敗しました。 :(:(
誰が私にこのことについていくつかのアドバイスを与えることができ、どのように私は
以下のように呼び出しマップ()関数の後の代わりに配列のVecと結果を受信し、それが@Dimaからで実現することができます。なんて偶然?ああ、thiis、この質問のための最善の答えです。 –