组合器:and_then
map()
被描述为一种简化 match
语句的可链式方法。然而,对返回 Option<T>
的函数使用 map()
会导致嵌套的 Option<Option<T>>
。将多个调用链接在一起可能会变得令人困惑。这就是另一个被称为 and_then()
的组合器发挥作用的地方,它在某些语言中也被称为 flatmap。
and_then()
使用包装的值调用其函数输入并返回结果。如果 Option
是 None
,则它返回 None
。
在以下示例中,cookable_v3()
的结果是一个 Option<Food>
。使用 map()
而不是 and_then()
会得到一个 Option<Option<Food>>
,这对 eat()
来说是一个无效的类型。