如何摆脱“非变量类型参数类型模式(类型,类型)中的类型是未经检查的,因为它被擦除”?

时间:2016-09-30 11:33:33

标签: scala

我正在使用Scala 2.10的项目中工作,我的代码使用扩展或匿名函数,例如。

multiTest("Tarn to Mc", fixture1) {
   case (capRaw: (Double, Int), /* .. more arguments .. */ callPut: Tuple2[Double, Double]) =>
   // test body implementation
}

对于上述两种情况,我都会收到警告:

non-variable type argument Double in type pattern (Double, Int) is unchecked since it is eliminated by erasure

如何在不必定义自己的类UDT的情况下摆脱此警告?

2 个答案:

答案 0 :(得分:1)

尝试:

multiTest("Tarn to Mc", fixture1) {
   case ((d: Double, i: Int), /* .. more arguments .. */ callPut: Tuple2[Double, Double]) =>
   // test body implementation
}

这可能会删除编译警告。

答案 1 :(得分:1)

虽然Barrameda的答案是完全合理的,但通常允许编译器检查类型本身可以做得更好。它looks like you went with the first solution to your previous question,但如果您使用第二个

case class FixtureTable[A](heading: Map[String, String], values: Seq[A])
def multiTest[A](testName: String, fixture: FixtureTable[A])(fun: A => Unit)(implicit pos: source.Position): Unit = ...

你不会收到警告,因为编译器已经知道capRaw的类型为(Double, Int),并且不需要插入支票(当然,出于同样的原因)你可以在没有类型的情况下编写case capRaw =>