匹配列表的模式

nei*_*eil -6 scala

为什么以下代码不能按预期工作?通过查看代码,我认为它可能会返回"数字列表",因为数字是带有数字的列表.但我运行代码并将输出作为"字符串列表".猜猜我清除了这里的大部分混乱.

val numbers: List[Int] = List(1,2,3)
val numbersMatch: String = numbers match {
  case listOfStrings: List[String] => "a list of strings"
  case listOfNumbers: List[Int] => "a list of numbers"
  case _ => ""
}
println(numbersMatch)
Run Code Online (Sandbox Code Playgroud)

Aki*_*Aki 7

此代码将打印出它是一个字符串列表,这是在大多数JVM语言上编译泛型的方式的结果.

他们使用所谓的"类型擦除"来删除泛型.由于泛型类型在运行时不可用,因此Scala无法区分List[String]List[Int]第一个案例匹配.如果您编译代码,Scala实际上会警告您:

警告:无结果类型测试:List [Int]类型的值也不能是List [String](List [String]的基础)(但仍可能匹配其擦除)

case listOfStrings:List [String] =>"字符串列表"