Scala: Почему список типов Int также содержит String? - PullRequest
2 голосов
/ 03 ноября 2019
val wordList = List("I", "want", "to", "learn", "scala")
val wordSizeList = list.map(x=>x.length)
def func[A, B](a:List[A]):List[B]={
  a.collect({case x:B => x})
}

val result = func[Any, Int](wordList ::: wordSizeList)

Ниже приведен результат листа

wordList: List[String] = List(I, want, to, learn, scala)
wordSizeList: List[Int] = List(1, 4, 2, 5, 5)
func: [A, B](a: List[A])List[B]

result: List[Int] = List(I, want, to, learn, scala, 1, 4, 2, 5, 5)

, почему он не фильтруется на основе общего типа "B"? И если вы видите список результатов, как список типов Int может также содержать строку?

1 Ответ

6 голосов
/ 03 ноября 2019

Мне кажется, что проблема удаления типа может быть исправлена ​​с помощью ClassTag:

import scala.reflect.ClassTag

def func[A, B : ClassTag](a: List[A]): List[B] = {
  a.collect{ case x: B => x }
}

val result = func[Any, Int](wordList ::: wordSizeList)
// result: List[Int] = List(1, 4, 2, 5, 5)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...