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

Han*_*Sun 2 functional-programming scala

我的Scala代码看起来像这样

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

print(a)
print(a+100)
Run Code Online (Sandbox Code Playgroud)

print(a),因为会引发错误a超出范围评估该行当..然后,我怎样可以定义一个val根据条件表达式?有没有人有这个想法?

sen*_*nia 9

scala if表达式中 - 它返回值.所以你可以将这个值分配给val:

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

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

print(a)
print(a+100)
Run Code Online (Sandbox Code Playgroud)

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

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

print(a)
print(b)
Run Code Online (Sandbox Code Playgroud)

以上内容可以进一步扩展到match陈述和解包任何可能是unapply'd.

另请参见Scala /内置控制结构编程