私は時々次のパターンに出くわします、そこで私は本質的にを持っていてPartialFunction[SomeType,AnotherType]
、それをとして扱いたいですFunction[SomeType,Option[AnotherType]
、例えば:
def f(s:SomeType):Option[AnotherType] = s match {
case s1:SubType1 => Some(AnotherType(s1.whatever))
case s2:SubType2 => Some(AnotherType(s2.whatever))
case _ => None
}
デフォルトのケースを回避し、結果を定義された場所にラップする方法で上記の関数を作成する方法はありますSome
か?私がこれまでに思いついた最高のものはこれです:
def f(s:SomeType):Option[AnotherType] = pf.lift(s)
def pf:PartialFunction[SomeType,AnotherType] = {
case s1:SubType1 => AnotherType(s1.whatever)
case s2:SubType2 => AnotherType(s2.whatever)
}
中間関数を定義せずにそれを行う方法はありますか?私はすでに次のようにさまざまなことを試しましたが、まだコンパイルするものがありません。
def f:Function[SomeType,Option[AnotherType]] = {
case s1:SubType1 => AnotherType(s1.whatever)
case s2:SubType2 => AnotherType(s2.whatever)
}.lift