Преобразуйте Option класса case в кортеж его элементов - PullRequest
0 голосов
/ 25 мая 2018

Итак, у меня есть следующий класс дел

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 Ответ

0 голосов
/ 25 мая 2018

Простой ответ на ваш вопрос - «нет», ваш код в значительной степени хорош, как он получает.

Scala не предоставляет универсального способа создания кортежа из класса case, вам нужноизвлечь элементы и создать кортеж из них.И другие способы анализа Option, такие как fold, создают более уродливый код.


Я понимаю, что это только пример, но ваш код выглядит довольно странно.Текущий код может создать кортеж (None, Some(3)), который представляет собой заказ на 3 ничто!Конечно, вы действительно хотите Option[(String, Option[Int])], который является необязательным заказом для необязательного номера элемента.

Код для этого просто

maybeOrder.collect{ case Order(Some(i), q) => (i, q) }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...