我正在使用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的情况下摆脱此警告?
答案 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 =>
。