我的Scala代码看起来像这样
if (true) { val a = 1 } else { val a = 2 } print(a) print(a+100)
字符串print(a)将抛出错误,因为a在计算该行时超出了范围..那么我如何根据条件表达式定义val?
print(a)
a
val
km0tfn4u1#
在scala中,if是表达式-它返回值。所以你可以把这个值赋给val:
scala
if
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的东西。此外,如果你有多个相同类型的变量,你可以使用列表解构:
match
unapply
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编程/内置控制结构
1条答案
按热度按时间km0tfn4u1#
在
scala
中,if
是表达式-它返回值。所以你可以把这个值赋给val
:字符串
值得注意的是,这个习惯用法也可以通过利用解构赋值来扩展到声明和设置多个变量:
型
以上可以进一步扩展到
match
语句和解包任何可以被unapply
'd的东西。此外,如果你有多个相同类型的变量,你可以使用列表解构:
型
另请参阅Scala编程/内置控制结构