首页 > 解决方案 > 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在应用程序中使用配置参数,但在这种情况下,此特定功能与此无关。我正在寻找正确的方法来避免调用不起作用的代码。

标签: scalaif-statement

解决方案


Scala 是功能性的,因此使用return早期突破几乎总是一个坏主意(部分原因是return它的工作方式不像它可能出现的那样)。

在这种情况下,有几个选择。

Usingmap允许Option处理 an 中的值(如果存在):

val xOpt = z.map { x =>
      // process x
    }

xOpt是一个新的Option,包含处理的结果,或者None如果z是已经None

另一种方法是使用默认值 if zisNone然后使用它。

val x = z.getOrElse(defaultX)
// process x

在这种情况下x是一个裸值而不是Option.


推荐阅读