1. ホーム
  2. scala

scalaのID関数はありますか?

2023-09-25 13:01:56

質問

のようなものがある場合 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 . 私はいくつかのことを試しましたが、無駄でした。誰かこのようなものが動作するようにしたことがありますか?

どのように解決するのですか?

IDがある 関数があります。 .

l flatMap identity[Option[String]]

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

A for expresionの方がすっきりしていると思います。

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

編集します。

なぜ型パラメータ(Option[String])が必要なのか、考えてみました。問題はOption[T]からIterable[T]への型変換にあるようです。

ID関数を次のように定義すると

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

は、typeパラメータを省略することができます。