
- Scala 中的 for 前面是一个 pattern,而不是简单地参数,会编译成withFilter,比如
1
2
3
4
5
6
7
8
9
10
11
12
13
14val s = Seq(Seq(1, 2), Seq(3, 4), Seq(5, 6, 7))
for (Seq(k, j) <- s) {
println(k + j)
}
}
// 大致编译成
s.withFilter {
case seq if seq.length == 2 => true
case _ => false
}.foreach{
case seq if seq.length == 2 => println(seq.sum) // 这里确实又判断一次,可用 jad 反编译或 scalac -print 验证
case _ => throw new MatchError()
}




近期评论