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

时间:2015-02-17 14:28:35

标签: scala functional-programming

我的Scala代码看起来像这样

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

print(a)
print(a+100)

print(a)会因为a在评估该行时超出范围而抛出错误。那么如何根据条件表达式定义val?有没有人有这方面的想法?

1 个答案:

答案 0 :(得分: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)

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

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

print(a)
print(b)

上述内容可以进一步扩展到match语句,并解包任何可能unapply'的内容。

另见Programming in Scala/Built-in Control Structures