scala의 collection에서 [error]  required: scala.collection.GenTraversableOnce[?] 에러가 나는 경우가 있다..




예)


scala> List(1, "x").flatten

<console>:12: error: No implicit view available from Any => scala.collection.GenTraversableOnce[B].

       List(1, "x").flatten




scala> List(1, "x").flatMap(a => a)

<console>:12: error: type mismatch;

 found   : Any

 required: scala.collection.GenTraversableOnce[?]

       List(1, "x").flatMap(a => a)

                                 ^



실제 api를 보면  다음과 같이 A => GenTraversableOnce라는 타입을 받는다. 


def flatten[B](implicit asTraversable: A => /*<:<!!!*/ GenTraversableOnce[B]): CC[B] = {


final override def flatMap[B, That](f: A => GenTraversableOnce[B])
                       (implicit bf: CanBuildFrom[List[A], B, That]): That = {



재미있는 것은 Option은 GenTraversableOnce으로 implicit으로 변환할 수 있다. 




이전에 에러를 수정하려면 다음처럼 수정하면 될 것이다.



scala> List(Some(1), Some("x"), None).flatten

res9: List[Any] = List(1, x)



scala> List(1, "x").flatMap(a => Some(a))

res8: List[Any] = List(1, x)



Posted by '김용환'
,