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}
andThen はここで期待どおりに動作します。
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 を取得したいのですが… in などの各関数を持ち上げることでこの動作を取得できますが、pf1.lift(x).flatMap(pf3.lift)
純粋な PartialFunction API を使用するより簡単な方法はありますか? (そして、各部分関数を個別に持ち上げずに?)