Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 如何摆脱"";类型模式(类型,类型)中的非变量类型参数类型未选中,因为它已通过擦除而消除;?_Scala - Fatal编程技术网

Scala 如何摆脱"";类型模式(类型,类型)中的非变量类型参数类型未选中,因为它已通过擦除而消除;?

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

我在一个使用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的情况下消除此警告?

尝试:

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]