scala - 处理具有高阶函数的 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
,filter
或foreach
<...> 使用scala.Option
值的不太惯用的方法是通过模式匹配
我不太确定我是否理解“惯用语”的确切含义,但这对我来说听起来“好”。
解决方案
像这样的东西?
x.fold("Error1")(_.fold("Error2")(_.status()))
推荐阅读
- php - 此路由不支持 GET 方法。支持方式:提交表单后POST
- json - 遍历嵌套的 JSON 列表并将一个值添加到列表中
- java - BigDecimal VS 浮点数
- sql - 将附加到索引的不同数量的元素相加
- .net - 信任多个 IdentityServer 实例
- sas - SAS使用多个where子句作为不同的输出列多次选择相同的列
- r - 将 unnest_longer / unlist 应用于嵌套列表,以便我可以使用 ggplot2
- c# - 如何在 c# 中找到随机生成的 int 的最后一个值?
- git - 无法配置 .gitattributes 以对合并产生任何影响
- javascript - 在反应中通过拖放创建受控输入