Scala中if-else链式调用map时condition2不符合预期的问题咨询
问题原因与解决方案
核心问题:方法调用的作用范围
你遇到的问题源于Scala的表达式优先级规则:.map(_ + 1)并没有绑定到整个if-else表达式,而是仅绑定在else分支的Seq(1, 2, 3)上。
- 当
condition2为true时,代码执行if分支的Seq(1, 2, 3),直接返回该序列,未经过map处理,所以结果是List(1,2,3)。 - 当
condition3为false时,执行else分支的Seq(1, 2, 3).map(_ + 1),自然得到预期的List(2,3,4)。
修正方法
要让map作用于整个if-else的结果,需用括号把整个if-else表达式包裹,确保方法调用绑定到整个表达式:
val condition2: Boolean = true val c = (if (condition2) { Seq(1, 2, 3) } else { Seq(1, 2, 3) }).map(_ + 1) println(c) // 现在结果为List(2,3,4)
语法规则说明
Scala中,后缀方法调用(带点的方法调用)的优先级高于条件表达式(if-else)。如果没有显式添加括号,方法调用会优先关联到它前面最近的可调用子表达式,而非整个条件表达式的结果。
内容的提问来源于stack exchange,提问作者guo
相关产品推荐
相关产品推荐

