Scala 如何摆脱"";类型模式(类型,类型)中的非变量类型参数类型未选中,因为它已通过擦除而消除;?
我在一个使用Scala 2.10的项目中工作,我有一段代码,它使用了一个扩展的或注释性的函数,例如Scala 如何摆脱"";类型模式(类型,类型)中的非变量类型参数类型未选中,因为它已通过擦除而消除;?,scala,Scala,我在一个使用Scala 2.10的项目中工作,我有一段代码,它使用了一个扩展的或注释性的函数,例如 multiTest("Tarn to Mc", fixture1) { case (capRaw: (Double, Int), /* .. more arguments .. */ callPut: Tuple2[Double, Double]) => // test body implementation } 对于上述两种情况,我都得到了警告: non-variable t
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的情况下消除此警告?尝试:
multiTest("Tarn to Mc", fixture1) {
case ((d: Double, i: Int), /* .. more arguments .. */ callPut: Tuple2[Double, Double]) =>
// test body implementation
}
这可能会删除编译警告 虽然Barramada的答案完全合理,但您通常可以通过允许编译器检查类型本身来做得更好。是的,但是如果你用第二个
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=>
,而不使用该类型) 哈哈哈,很好的国际Q接球。。。既然一切都在进行中,我会按照你的建议去做,但我会尝试实施你提出的更清洁的解决方案。但是,正如您之前指出的,使用模板参数很难实现通用的交叉积。现在我只是简单地使用产品
而不是[A]