Let us reuse examples from Daily scala :
type PF = PartialFunction[Int,Int]
val pf1 : PF = {case 1 => 2}
val pf2 : PF = {case 2 => 3}
and let us add:
val pf3 : PF = {case 3 => 4}
andThen works as expected here:
pf1 andThen pf2 isDefinedAt(x)
returns true
iff x == 1
(actually, pf2
does not need to be a PartialFunction at all)
However, I expected that:
pf1 andThen pf3 isDefinedAt(x)
would return false
for all x
(i.e., iff pf1 is defined, check for pf3), but it does not and only validates pf1.
In the end, pf1 andThen pf3 lift(x)
always result in a MatchError. I would prefer to get Noneā¦ I can obtain this behavior by lifting each function such as in pf1.lift(x).flatMap(pf3.lift)
but is there any easier way using pure PartialFunction API? (and without lifting each partial function individually?)