元组大小写映射不适用于scala中的通用Array [T]

时间:2012-12-08 17:54:49

标签: arrays scala pattern-matching manifest implicit

我不明白为什么当我尝试使用泛型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) =>

1 个答案:

答案 0 :(得分: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)
  }