2

caseジェネリックスで使用しようとすると、コンパイラがタプルの命令マッピングを理解できない理由がわかりませんArray[T]

class Variable[T](val p: Prototype[T], val value: T)

class Prototype[T](val name: String)(implicit m: Manifest[T])

  // Columns to variable converter
implicit def columns2Variables[T](columns:Array[(String,Array[T])]): Iterable[Variable[Array[T]]] = {
    columns.map{
      case(name,value) =>
      new Variable[Array[T]](new Prototype[Array[T]](name), value)
     }.toIterable
  }

エラーは言う:

error: constructor cannot be instantiated to expected type;
found   : (T1, T2)
required: fr.geocite.simExplorator.data.Variable[Array[T]]
case(name,value) =>
4

1 に答える 1

0

エラーの表現についてもわかりませんが、まず、T構築に必要なため、のマニフェストが必要にnew Prototype[Array[T]]なります(typeパラメーターのマニフェストがスコープ内にある場合は配列マニフェストを自動的に生成できます)。

配列が絶対に必要な理由はありますか?これらはJavaの型システムの不規則性を伴い、変更可能であり、たとえば、ほとんど利点がありませんVector。最後に、配列とは異なり、標準のコレクションは構築にマニフェストを必要としないので、おそらくそれがマニフェストを持ち歩く理由です。

class Variable[T](val p: Prototype[T], val value: T)
class Prototype[T](val name: String)

implicit def cols2v[T](cols: Vector[(String,Vector[T])]): Vector[Variable[Vector[T]]] =
  cols.map {
    case (name, value) => new Variable(new Prototype(name), value)
  }
于 2012-12-09T08:48:36.560 に答える