如何指定变量的泛型类型?

时间:2015-11-19 10:45:50

标签: scala generics type-inference

在以下代码中,我想将mapbreakOut一起使用,并指定结果应为IndexedSeq,但我不想提供序列元素的类型,我希望编译器推导出它。我可以编写自己的帮助程序泛型函数(下面是asIndexedSeq)来完成这项工作,但我想我可能会错过一些明显更“原生”的方法来解决这个问题。

val m = Map("a"->1, "b"->2)

implicit class CastAsIndexedSeq[T](s: IndexedSeq[T]) {
  def asIndexedSeq = s
}

val t1 = m.map(_._1 + ":")(collection.breakOut).asIndexedSeq
val t2: IndexedSeq[String]= m.map(_._1 + ":")(collection.breakOut) // works, but I want String to be deduced
val t4: IndexedSeq[_] = m.map(_._1 + ":")(collection.breakOut) // almost works, but static type is lost
val t4: IndexedSeq[_] = m.map(_._1 + ":").toIndexedSeq // intermediate collection created, I prefer breakOut
val t3: IndexedSeq = m.map(_._1 + ":")(collection.breakOut) // compile error

有更简洁的方法吗?

0 个答案:

没有答案