私は時々、私は基本的にPartialFunction[SomeType,AnotherType]
を持っている、とFunction[SomeType,Option[AnotherType]
としてそれを扱いたい、例えば次のパターン、渡って来る:ScalaでPartialFunctionを持ち上げる方法がありますか?
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
あなたは中間の機能を意味しますか? – Raphael
@Raphael関数のリテラルは、そうでないことを示す型ヒントがない限り、部分的な関数リテラルではありません。 –
ああ、「持っている」とは「私がコードしている」という意味で、「タイプの価値がある」という意味ではありません。誤解、申し訳ありません。 – Raphael