首页 > 解决方案 > 处理具有高阶函数的 Scala 选项类型

问题描述

有一堂课

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的帖子中描述的那样。编码的正确方法是什么?


有一些关于提出问题的动机的话。官方文档

使用scala.Option实例最惯用的方法是将其视为集合或 monad 并使用map, flatMap,filterforeach<...> 使用scala.Option值的不太惯用的方法是通过模式匹配

我不太确定我是否理解“惯用语”的确切含义,但这对我来说听起来“好”

标签: scalahigher-order-functionsidiomsscala-option

解决方案


像这样的东西?

x.fold("Error1")(_.fold("Error2")(_.status()))

推荐阅读