Scala中如何在match表达式外部访问变量?var值未更新问题
Scala match表达式中变量更新无效的问题解决
你的代码存在两个关键问题,导致无法得到预期结果:
- 匹配分支未触发:你定义的
x值是2,但match表达式里只写了case 1的分支,这个分支永远不会被执行,变量自然不会被更新。 - 局部变量遮蔽:就算把
x改成1让分支命中,你在case块里用var v1="testObj1"重新声明了局部变量——这和外部的v1是完全独立的两个变量,修改局部变量不会影响外部的var。
修正方案1:正确修改外部var
调整x的值让分支命中,并且直接给外部变量赋值(不要重新声明var):
val x: Int = 1 // 修改为1,触发case 1分支 var v1: String = "" var v2: String = "" x match { case 1 => v1 = "testObj1" // 直接赋值给外部变量,不重新声明 v2 = "testobj2" } println(v1, v2) // 输出(testObj1, testobj2)
修正方案2:Scala风格的无var写法
Scala更推荐避免使用var,直接通过match表达式返回结果并解构赋值:
val x: Int = 1 // 通过match返回元组,直接解构给v1和v2 val (v1, v2) = x match { case 1 => ("testObj1", "testobj2") case _ => ("", "") // 处理x不是1的情况 } println(v1, v2) // 输出(testObj1, testobj2)
内容的提问来源于stack exchange,提问作者Shankar Panda
相关产品推荐
相关产品推荐

