문제

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)
    }

}

Here I get a compilation error "scala: type mismatch; found:List[Object] required: List[Symbol] case h::tail => foo(h._1 : Int, h._2 : Symbol) :+ decode(tail) "

도움이 되었습니까?

해결책

It is not a type erasure, simple type mismatch:

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

Result of foo is List[Symbol], result of decode is List[Symbol]. Now you're trying to put List inside List, no surprize that compiler thinks that the only way to store List and Symbols inside List is to give that later list Object (Any) type.

Most likely you wanted to simply combine two lists:

foo(h._1 , h._2 ) ++ decode(tail)
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top