bugfix> scala > 投稿

だから私は次のケースクラスを持っています

case class Order(itemName: Option[String], quantity: Option[Int])

そして、私は注文のオプションである変数を持っています

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)

回答 1 件
  • あなたの質問に対する簡単な答えは「いいえ」であり、あなたのコードは取得したものとほぼ同じくらい良いです。

    Scalaはcaseクラスからタプルを作成する一般的な方法を提供していません。要素を抽出し、それらからタプルを作成する必要があります。 Option を解析する他の方法 、 fold など 、いコードを作成します。


    これは単なる例であることを理解していますが、コードはかなり奇妙に見えます。現在のコードはタプル (None, Some(3)) を作成できます  これは3つのナッシングの注文です!本当にあなたは本当に Option[(String, Option[Int])] が欲しい  これは、オプションのアイテム番号のオプションの注文です。

    そのためのコードはただ

    maybeOrder.collect{ case Order(Some(i), q) => (i, q) }
    
    

あなたの答え