在 Scala 中,如何在 `if 块` 中定义 `val`?

In Scala, how to define a `val` in a `if block`?

我的 Scala 代码如下所示

if (true) {
  val a = 1
}
else {
  val a = 2
}

print(a)
print(a+100)

print(a) 将抛出错误,因为 a 在评估该行时超出范围..那么我如何根据条件表达式定义 val ?有人对此有想法吗?

scalaif是表达式-它的returns值。因此,您可以将此值分配给 val:

val a =
  if (true) {
    1
  } else {
    2
  }

// for simple expressions:
val a2 = if (true) 1 else 2

print(a)
print(a+100)

值得注意的是,这个习语也可以扩展到利用解构赋值来声明和设置多个变量:

val (a, b) =
  if (true) {
    (1, 5)
  } else {
    (2, 10)
  }

print(a)
print(b)

以上可以进一步扩展到 match 语句和解包任何可以 unapply 的东西。

另见 Programming in Scala/Built-in Control Structures