在Scala中,如何在“if”块中定义“瓦尔”?

bbmckpt7  于 11个月前  发布在  Scala
关注(0)|答案(1)|浏览(121)

我的Scala代码看起来像这样

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

print(a)
print(a+100)

字符串
print(a)将抛出错误,因为a在计算该行时超出了范围..那么我如何根据条件表达式定义val

km0tfn4u

km0tfn4u1#

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'd的东西。
此外,如果你有多个相同类型的变量,你可以使用列表解构:

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

// OR

val a :: b :: Nil =
  if (true)
    List(1, 5)
  else
    List(2, 10)

print(a)
print(b)


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

相关问题