scala - for后如何避免平面图
问题描述
我有以下代码片段:
(for {
_ <- LiveUserQuery.make(DbManager.failRollback).create(user)
- <- IO.sleep(2.seconds)
a <- router.run(Request(GET, uri"/user/d85ec250-bb5c-11ea-b3de-0242ac130030")).value
} yield a).flatMap {
case Some(req) =>
req.as[User].map { u =>
val is_uuid_valid = u.id.compareTo(UUID.fromString("d85ec250-bb5c-11ea-b3de-0242ac130030")) == 0
expect(is_uuid_valid) && expect(u.gender == "F")
}
case None => expect(false)
}
并想避免flatMap
之后的for
。如何将代码块flatMap
移入for
?
解决方案
您可以使用match
表达式:
for {
_ <- LiveUserQuery.make(DbManager.failRollback).create(user)
- <- IO.sleep(2.seconds)
a <- router.run(Request(GET, uri"/user/d85ec250-bb5c-11ea-b3de-0242ac130030")).value
result <- a match {
case Some(req) =>
req.as[User].map { u =>
val is_uuid_valid = u.id.compareTo(UUID.fromString("d85ec250-bb5c-11ea-b3de-0242ac130030")) == 0
expect(is_uuid_valid) && expect(u.gender == "F")
}
case None => expect(false)
}
} yield result
推荐阅读
- rpm - 如何指示 yum 从特定 repo 安装特定软件包 (rpm)
- javascript - 无法获取输入框的值
- electron - tray icon doesn't close immediately on app.quit in electron
- powershell - 无法将参数“替换”绑定到目标
- python - python文件显示AttributeError:模块'http'没有属性'client'
- javascript - 正则表达式只允许数字,一个'$'在第一位和一个小数 - javascript
- reactjs - 反应路由器不重新加载旧组件
- intellij-idea - 在 Intellij Idea 的滚动条中显示代码
- sapui5 - 无法读取未定义的属性“sapUiGlobalLogo”和无法读取未定义的属性“sapUshellLeftViewPortWidthMedium”
- javascript - 如何在javascript中的文本到语音延迟几秒钟