Combinators: and_then
先ほどはmap()
を、チェイン構文を用いてmatch
文を単純化する物として説明しました。しかしOption<T>
を返す関数に対してのmap()
の使用はネストしたOption<Option<T>>
を生じさせます。ですので、複数の関数呼び出しをチェインさせることは混乱を招く場合があります。そんな時こそand_then()
の出番です。他の言語ではflatmapと呼ばれることもあります。
and_then()
は引数として与えられた関数にラップされた値を渡しますが、その値がNone
だった場合はNone
を返します。
以下の例ではcookable_v3()
はOption<Food>
を返すため、and_then()
ではなくmap()
を使用すると最終的にOption<Option<Food>>
になります。これはeat()
には不適切な型です。