enter l2 enter l1 -------- enter l2 -------- enter l2 enter l1 java.lang.IllegalStateException: aa at L.p(<pastie>:12) at L.p$(<pastie>:12) at C$.$line6$$read$L1$$super$p(<pastie>:37) at L1.p(<pastie>:21) at L1.p$(<pastie>:16) at C$.$line6$$read$L2$$super$p(<pastie>:37) at L2.p(<pastie>:32) at L2.p$(<pastie>:27) at C$.p(<pastie>:37) ... 37 elided
由输出信息可以看出执行顺序是 L2 -> L1
当条件 x = 1 时,先走 L2 不满足条件,去 L1 处理 当条件 x = 2 时,先走 L2 满足条件处理完结束 当条件 x = 3 时,先走 L2, 再到 L1, 都不满足, 在 trait 中 处理 抛出异常
利用 Scala 偏函数 实现责任链
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
val b1: PartialFunction[String, String] = { case o => s"$o-b1" }
val b2: PartialFunction[String, String] = { case o => s"$o-b2" }
val b3: PartialFunction[String, String] = { case o => s"$o-b3" }