で発生covariant type T occurs in invariant position in type => Array[T] of value gene
共変タイプTは、私がScalaで私の最初のステップを移動していると私は、次のコードが動作したいと思い不変位置
私はのような何か行うことができます知っている:
trait Gene[+T] {
def gene[U >: T]: Array[U]
}
を私は値を必要とするので、これは問題を解決していません:pratically私が言うことをしようとしていることは、私はインの気にしない」であります私が知っているのは、遺伝子は、その内容を返す遺伝子フィールドを持つことを知っています」。 (ここで+ Tはtype Genome = Array[Gene[Any]]
のようなことをしてから、単一の遺伝子クラスに対するラッパーとして使用するので、異種配列タイプを持つことができます) Scalaでそれを行うことは可能ですか?間違ったアプローチ? Scalaネイティブ共変量クラスのような、別の構造を使用する方が良いでしょうか?
ありがとうございます!
P.S.私はまた、特性ではなくクラスと抽象クラスを試しましたが、常に同じ結果が得られました。
編集:だから私は今、私は入れて検索したデータをさまざまなタイプで、すべてのタイプでそれらを使用することができると思う
package object ga {
class Gene[+T](val gene: Vector[T]){
def apply(idx: Int) = gene(idx)
override def toString() = gene.toString
}
implicit def toGene[T](a: Vector[T]) = new Gene(a)
type Genome = Array[Gene[Any]]
}
package test
import ga._
object Test {
def main(args: Array[String]) {
val g = Vector(1, 3, 4)
val g2 = Vector("a", "b")
val genome1: Genome = Array(g, g2)
println("Genome")
for(gene <- genome1) println(gene.gene)
}
}
:ディディエ・デュポン社製の種類の提案で、私はこのコードに来ましたおいしさをチェック!
いいえ、私はそれを突然変異させる必要はありません。私は確かにVectorについて考えています。私の主な要件は、クライアントコードで異なるGene [T]の配列を管理することですが、依然として操作上の型制約があります。私はそれが難しいことを知っているし、私の最初のステップでまだ多分、私は単にあまりにも機能的すぎる、または動的すぎると思うかもしれないが、私はより大きなものを開発するつもりであり、これは必須であるかもしれません:自動ボクシングと値のunboxing。あなたが望むなら、私はその質問を言い換えることができます! –
してください。あなたがしていることはうまくいかないが、必要なものが分からないので、もっと助けるのは難しい。パフォーマンスがあなたがArrayを望む理由ですか?Gene [T]の異種コレクションでは、クライアントは何を期待していますか? –
私の答えを編集しました。私はあなたの助けを借りて私が解決策を見つけたと思うので、それを見直してください。明らかに私はあなたの答えを受け入れるつもりだ;) –