为什么condition2
的行为不是我所期望的?是否有任何链接/引用指定此类行为?
根据我的理解,在condition2
的情况下,.map(_ + 1)
与else{}
结合,而我期望.map(_ + 1)
与if-else
结合的结果
object Main {
def main(args: Array[String]): Unit = {
val condition: Boolean = true
val a = if (condition) {
Seq(1, 2, 3)
} else {
Seq(1, 2, 3)
}
val b = a.map(_ + 1)
println(b) // Results in List(2, 3, 4)
val condition2: Boolean = true
val c = if (condition2) {
Seq(1, 2, 3)
} else {
Seq(1, 2, 3)
}.map(_ + 1)
println(c) // Results in List(1,2,3), but I expect it to be List(2,3,4)
val condition3: Boolean = false
val d = if (condition3) {
Seq(1, 2, 3)
} else {
Seq(1, 2, 3)
}.map(_ + 1)
println(d) // Results in List(2,3,4)
}
}
谢谢你的帮助。
1条答案
按热度按时间8wtpewkr1#
由于Scala编译器将
if (cond) a else b
结构中的a
和b
视为单独的表达式,因此在您的示例中,a
是Seq(1, 2, 3)
,b
是{Seq(1, 2, 3)}.map(_ + 1)
(即,else
之后的所有内容都是单独的表达式)。您可以将if-else
Package 到括号中:而且它会像预期的那样工作。
另请参阅Scala 2.13的条件表达式规范。