Процесс Scala Тип опции с функциями высшего порядка - PullRequest
0 голосов
/ 04 мая 2020

Есть класс

class MyType {
  def status(): String = "Connected" // demo implementation
}

У меня есть val x: Option[Option[MyType]]. Мне нужно обработать это значение следующим образом:

x match {
  case None => "Error1"
  case Some(None) => "Error2"
  case Some(Some(t)) => t.status
}

Я хотел бы переписать тот же код с функциями более высокого порядка, как это описано в Tom Morris post . Как правильно его кодировать?


Несколько слов о мотивации, чтобы задать вопрос. Официальная документация гласит :

Самый идиоматический c способ использования экземпляра scala.Option состоит в том, чтобы рассматривать его как коллекцию или монаду и использовать map, flatMap, filter или foreach <...> Менее идиоматизированный c способ использования scala.Option значений заключается в сопоставлении с шаблоном

Я не совсем уверен, что понимаю, что "idiomati c" означает точно, но звучит как "хорошо" для меня.

Ответы [ 2 ]

4 голосов
/ 04 мая 2020

Как то так?

x.fold("Error1")(_.fold("Error2")(_.status()))
0 голосов
/ 05 мая 2020

map -way:

x.map(_.map(_.status).getOrElse("Error2")).getOrElse("Error1")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...