的問題是,你要flatMap一個List[Option[T]]
到List[T]
:類型推斷:如果在使用隱式類型轉換的通用方法
val l = List(Some("Hello"), None, Some("World"))
獲得:
List(Hello, World)
但目前還沒有很好的解決方案:
l flatMap(o => o)
l flatMap identity[Option[String]]
l flatMap (x => Option.option2Iterable(identity(x)))
for(x <- l; y <- x) yield y
使用身份函數d OES不行的,因爲從Option[T]
到Iterable[T]
一個需要的類型轉換:
l flatMap identity
<console>:6: error: type mismatch;
found : A
required: Iterable[?]
l flatMap identity
有沒有解決這個問題的方法嗎?
問題的一部分是爲什麼類型推理器在需要隱式類型轉換時工作不同?
(這個問題上來,當討論this question about the identity function。)
'l.flatMap(identity):List [String]'在2.7中也不起作用。 '錯誤:類型不匹配;找到:A required:Iterable [String] l.flatMap(identity):List [String]' – 2009-11-26 08:30:43