所以我有以下案例类
case class Order(itemName: Option[String], quantity: Option[Int])
我有一个变量,它是Order
的一个选项val maybeOrder: Option[Order] = ??? // could be Some(...) or None
我想知道有更一般的方式来做以下事情吗? (这是为了使它适用于具有N个参数的案例类)
maybeOrder match {
case Some(order) => (order.itemName, order.quantity)
case None => (None, None)
}
对于任何案例类,需要一个很好的方法来处理以下情况:
Some(Order) => (itemNameOption, quantityOption)
None => (None, None)
答案 0 :(得分:0)
你的问题的简单答案是"没有",你的代码几乎和它一样好。
Scala不提供从案例类创建元组的通用方法,您需要提取元素并从中创建元组。解析Option
的其他方式(例如fold
)会创建更加丑陋的代码。
我知道这只是一个例子,但你的代码确实看起来很奇怪。当前代码可以创建一个元组(None, Some(3))
,这是3个nothings的订单!当然你真的想要Option[(String, Option[Int])]
这是一个可选数量的项目的可选订单。
该代码只是
maybeOrder.collect{ case Order(Some(i), q) => (i, q) }