假设我有两个函数用于获取订单和订单项:
``` def getOrders(): Option[List[Int]] = ... def getOrderItems(orderId: Int): Option[List[Int]] = ... ```
请注意,这两个函数都返回 `Option[List]`,因为每个函数可能会失败。
现在我想要按如下方式获得所有订单项的 `Option` 列表:
- 如果两个函数都返回 `Some`,则返回 `Some[List]` - 如果其中任何一个返回 `None`,则返回 `None`
我尝试使用 `for` 组合这些函数(见下文),但并没有成功。
``` val allOrderItems = for { orderIds <- getOrders(); orderId <- orderIds; orderItems <- getOrderItems(orderId) } yield orderItems ```
如何使用函数 `getOrders` 和 `getOrderItems` 构建一个函数 `getAllOrderItems():Option[List[Int]]`?
``` def getOrders(): Option[List[Int]] = ... def getOrderItems(orderId: Int): Option[List[Int]] = ... ```
请注意,这两个函数都返回 `Option[List]`,因为每个函数可能会失败。
现在我想要按如下方式获得所有订单项的 `Option` 列表:
- 如果两个函数都返回 `Some`,则返回 `Some[List]` - 如果其中任何一个返回 `None`,则返回 `None`
我尝试使用 `for` 组合这些函数(见下文),但并没有成功。
``` val allOrderItems = for { orderIds <- getOrders(); orderId <- orderIds; orderItems <- getOrderItems(orderId) } yield orderItems ```
如何使用函数 `getOrders` 和 `getOrderItems` 构建一个函数 `getAllOrderItems():Option[List[Int]]`?
monad transformer
看起来是一个高级话题。此外,我需要scalaz
来实现它。您如何建议使用breakOut
实现它? - MichaeltoList
看起来真的很简单。 - Michael