使用高阶函数处理 Scala Option 类型

Process Scala Option type with higher-order functions

有个class

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 中描述的高阶函数重写相同的代码。正确的编码方式是什么?


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

The most idiomatic way to use an scala.Option instance is to treat it as a collection or monad and use map,flatMap, filter, or foreach <...> A less-idiomatic way to use scala.Option values is via pattern matching

我不太确定我理解 "idiomatic" 的确切含义,但听起来像 "good"对我来说。

是这样的吗?

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

map-方式:

x.map(_.map(_.status).getOrElse("Error2")).getOrElse("Error1")