val flag = false
if (val data = flag) {
println(data)
}
是否可以分配flag
内部 if 语句并在 Scala 中自动评估?
是的,但它不会超出范围,因此您不能在 if 的正文中使用它
if ({val data = true; data})
println("data was true")
赋值不会返回值,但您可以返回它。最好做类似的事情
def test(data: Boolean) {
if (data) {/* data in scope */}
else {/* data in scope */}}
有一个很好的扩展功能可以帮助您处理您的案例和许多其他问题。您可以使用以下隐式转换来实现它:
implicit class AnyExtensions[A](val x: A) extends AnyVal {
def asSatisfying(p: A => Boolean): Option[A] =
if (p(x)) Some(x) else None
}
将其导入范围后,您可以对示例执行以下操作:
flag.asSatisfying(_).foreach(println)
在这个答案中有一些更好的用例详细解释了它。
此函数的主要优点是它允许您有效地消除引入中间变量的需要,从而使您能够将任何“if-else”逻辑解决为单行表达式。