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