组合器:and_then

map() 被描述为一种简化 match 语句的可链式方法。然而,对返回 Option<T> 的函数使用 map() 会导致嵌套的 Option<Option<T>>。将多个调用链接在一起可能会变得令人困惑。这就是另一个被称为 and_then() 的组合器发挥作用的地方,它在某些语言中也被称为 flatmap。

and_then() 使用包装的值调用其函数输入并返回结果。如果 OptionNone,则它返回 None

在以下示例中,cookable_v3() 的结果是一个 Option<Food>。使用 map() 而不是 and_then() 会得到一个 Option<Option<Food>>,这对 eat() 来说是一个无效的类型。

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

另请参阅

闭包, Option, Option::and_then(), 和 Option::flatten()