让我们重用日报Scala的例子:链接与andThen PartialFunctions在斯卡拉
type PF = PartialFunction[Int,Int]
val pf1 : PF = {case 1 => 2}
val pf2 : PF = {case 2 => 3}
,让我们补充:
val pf3 : PF = {case 3 => 4}
andThen工作如下预期:
pf1 andThen pf2 isDefinedAt(x)
回报true
iff x == 1
(实际上,pf2
不需要是Parti alFunction所有)
不过,我预计:
pf1 andThen pf3 isDefinedAt(x)
将返回false
所有x
(即,当且仅当PF1定义,请检查PF3),但它不只有验证PF1。
最后,pf1 andThen pf3 lift(x)
总是导致MatchError。我宁愿得到None ...我可以通过提升每个函数(如pf1.lift(x).flatMap(pf3.lift)
)来获得此行为,但使用纯PartialFunction API有没有更简单的方法? (且不起重单独每个部分的功能?)
我试试这个,但所有'apply'和'isDefinedAt' COLLED两次。 –