Чередование частичных функций с andThen в Scala
Давайте использовать примеры из 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
тогда и только тогдаx == 1
(фактически,pf2
не обязательно должен быть PartialFunction)
Однако я ожидал, что:
pf1 andThen pf3 isDefinedAt(x)
вернетсяfalse
для всехx
(то есть, если pf1 определен, проверьте pf3), но он не проверяет и только проверяет pf1.
В конце,pf1 andThen pf3 lift(x)
всегда приводить к MatchError. Я предпочел бы получить None ... Я могу получить это поведение, подняв каждую функцию, например, вpf1.lift(x).flatMap(pf3.lift)
но есть ли более простой способ использования чистого API PartialFunction? (и не поднимая каждую частичную функцию в отдельности?)