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)
'scala' 카테고리의 다른 글
[scala] 컬렉션의 take,drop,dropRight,takeWhile,slice 예제 (0) | 2017.03.09 |
---|---|
Intellij에서 scala-play2 환경 구축하기 (0) | 2017.03.08 |
[scala] List와 Array의 lift 메소드 (0) | 2017.03.04 |
[펌] spark 2.0 소개(성능) (0) | 2017.03.02 |
[spark] spark의 OutOfMemoryError 발생시 (0) | 2017.02.24 |