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]](如果其类型参数的清单在范围内,则可以自动生成数组清单)。

有什么理由绝对需要数组吗?它们带有 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 回答