Я хочу, чтобы избавиться от типа стирания предупреждения этого образца кода:Scala сопоставление с образцом по параметру типа
val a: Seq[Any] = Seq(1)
a match {
case b: Seq[Int] => b.map(c => println(2 * c))
case _ => println("Not matched")
}
Он собирает и работает нормально, но с предупреждением:
Предупреждение :(31, 13) аргумент типа non-variable Тип Int в типе Seq [Int] (лежащий в основе Seq [Int]) не отмечен, так как он равен , удаленным стиранием case b: Seq [Int] => b.map (c => println (2 * c)) ^
У вас есть какое-то простое решение для предотвращения стирания в этом случае?
Что есть я пытался до сих пор (accorting к this):
val a: Seq[Any] = Seq(1)
a match {
case [email protected](_:Int) => b.map(c => println(2 * c))
case _ => println("Not matched")
}
Но это не будет компилироваться, так как с теперь типа Any.
Я считаю, что есть несколько решений этой проблемы. Я соглашусь простейший.
Обратите внимание, что ваш подход нарушает parametricity - https://dl.dropboxusercontent.com/u/7810909/talks/parametricity/4985cb8e6d8d9a24e32d98204526c8e3b9319e33/parametricity.pdf. –