Scalaの恒等関数はありますか?質問する

Scalaの恒等関数はありますか?質問する

のようなものがあってList[Option[A]]、これを に変換したい場合List[A]、標準的な方法は を使用することですflatMap:

scala> val l = List(Some("Hello"), None, Some("World"))
l: List[Option[java.lang.String]] = List(Some(Hello), None, Some(World))

scala> l.flatMap( o => o)
res0: List[java.lang.String] = List(Hello, World)

今はo => o単なる恒等関数です。次のような方法があるはずだと考えていました。

l.flatMap(Identity) //return a List[String]

しかし、 をジェネリック化できないため、これを機能させることができませんobject。いくつか試してみましたが、効果はありませんでした。このようなものを機能させた人はいますか?

ベストアンサー1

アイデンティティがあるPredef 内の関数

l flatMap identity[Option[String]]

> List[String] = List(Hello, World)

for 式の方が良いと思います:

for(x <- l; y <- x) yield y

編集:

型パラメータ (Option[String]) が必要な理由を理解しようとしました。問題は Option[T] から Iterable[T] への型変換にあるようです。

恒等関数を次のように定義します。

l.flatMap( x => Option.option2Iterable(identity(x)))

型パラメータは省略できます。

おすすめ記事