让我们重用 Daily scala 中的示例:
type PF = PartialFunction[Int,Int]
val pf1 : PF = {case 1 => 2}
val pf2 : PF = {case 2 => 3}
让我们补充一下:
val pf3 : PF = {case 3 => 4}
然后在这里按预期工作:
pf1 andThen pf2 isDefinedAt(x)
返回true
iff x == 1
(实际上,pf2
根本不需要是 PartialFunction)
但是,我预计:
pf1 andThen pf3 isDefinedAt(x)
将返回false
所有x
(即,如果定义了 pf1,则检查 pf3),但它不会且仅验证 pf1。
最后,pf1 andThen pf3 lift(x)
总是会导致 MatchError。我宁愿得到 None... 我可以通过提升每个函数来获得这种行为,例如 inpf1.lift(x).flatMap(pf3.lift)
但是使用纯 PartialFunction API 有没有更简单的方法?(并且没有单独提升每个部分功能?)