Scala 类型擦除发生在哪里?什么是避免这种情况的安全方法?

Scala 类型擦除发生在哪里?什么是避免这种情况的安全方法?,scala,type-conversion,scala-2.10,Scala,Type Conversion,Scala 2.10,这里我得到了一个编译错误“scala:type mismatch;found:List[Object]required:List[Symbol]case h::tail=>foo(h._1:Int,h._2:Symbol):+decode(tail) “这不是类型擦除,简单的类型不匹配: def decode(l: List[(Int, Symbol)]) : List[Symbol] = { def foo(r : Int, s: Symbol):List[Symbol] = r ma

这里我得到了一个编译错误“scala:type mismatch;found:List[Object]required:List[Symbol]case h::tail=>foo(h._1:Int,h._2:Symbol):+decode(tail)

这不是类型擦除,简单的类型不匹配:

def decode(l: List[(Int, Symbol)]) : List[Symbol] = {
    def foo(r : Int, s: Symbol):List[Symbol] = r match {
      case 0 => Nil
      case x: Int => s::foo(r-1,s)
    }

    l match {
      case Nil => Nil
      case h::tail => foo(h._1 , h._2 ) :+ decode(tail)
    }

}
foo的结果是
List[Symbol]
,解码的结果是
List[Symbol]
。现在您试图将
List
放入
List
中,不足为奇的是,编译器认为在
List
中存储
List
Symbols
的唯一方法是给后面的List对象(Any)类型

您很可能希望简单地将两个列表合并:

foo(h._1 , h._2 ) :+ decode(tail)
foo(h._1 , h._2 ) ++ decode(tail)