scala - Scala 中类似 Swift 的“guard-let”
问题描述
在 Swift 中,可以执行以下操作:
guard let x = z else {return} // z is "String?"
在这个简单的情况下,如果z
(an optional) 为空,则函数将退出。
我真的很喜欢这种结构,最近开始在 Scala 中开发,我想知道 Scala 中是否有等价物。
我发现的是这样的:
val x = if (z.isEmpty) return else z.get // z is "Option[String]"
它有效 - 但我仍然想知道是否有更“Scala-ish”的方式来做到这一点。
编辑:用例是允许null
在应用程序中使用配置参数,但在这种情况下,此特定功能与此无关。我正在寻找正确的方法来避免调用不起作用的代码。
解决方案
Scala 是功能性的,因此使用return
早期突破几乎总是一个坏主意(部分原因是return
它的工作方式不像它可能出现的那样)。
在这种情况下,有几个选择。
Usingmap
允许Option
处理 an 中的值(如果存在):
val xOpt = z.map { x =>
// process x
}
xOpt
是一个新的Option
,包含处理的结果,或者None
如果z
是已经None
。
另一种方法是使用默认值 if z
isNone
然后使用它。
val x = z.getOrElse(defaultX)
// process x
在这种情况下x
是一个裸值而不是Option
.
推荐阅读
- ios - 从 ViewController 发送事件到 React-Native
- mysql - mysql数据分片地理
- ansible - 为什么 ansible 模块 win_template 没有看到我的 Windows 文件夹?
- angular - 我有一个formArray,在那个formArray中我只有formControls,而不是formGroup,我怎样才能循环通过html中的控件?
- swift - 从 SwiftUI 视图中访问参与者的隔离状态
- php - Doctrine hydrator 用另一个相关实体覆盖一个相关实体
- python - 如何使用 mplfinance python 在 y 轴上添加 hlines 的值
- html - 如何从对象数组中获取每个项目的详细信息?
- ios-universal-links - 测试通用链接时出现“文件被机器人屏蔽”怎么办?
- postgresql - 将 postgres 11 升级到 12