20180620 pattern in for

  1. Scala 中的 for 前面是一个 pattern,而不是简单地参数,会编译成withFilter,比如
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
      val 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()
    }