私は相対的なスカラの初心者で、Optionを返す関数またはPartialFunctionを使用して実行できるような実装を進める方法についていくつかアドバイスをしたいと思います。私は見つけることができるすべての関連記事を読んだことがありますが(質問の一番下を参照)、PartialFunctionを使用するか、または一方を他方に変換する技術的な詳細が含まれているようです。私はタイプの答えを探しています "状況がX、Y、Zなら、A else Bを使うだけでなく、Cも考慮する"。スカラ:オプションを返す関数の選択
この例の使用例は、パス・ファインダのライブラリを使用する場所間のパス検索です。場所がタイプL
であり、パスがタイプP
であり、所望のパス検索結果がIterable[P]
であるとする。パッチの検索結果は、特定の開始/終了時刻に定義されている場合とされていない場合がある、経路候補のすべての経路発見子(Googleマップのようなものは自転車、車、歩行者、地下鉄など)エンド・ロケーション・ペア。
あり、このことについてに行くには二つの方法のように見える:
(a)のf: (L,L) => Option[P]
としてパスファインダーを定義しfinders.map(_.apply(l1,l2)).filter(_.isDefined).map(_.get)
のようなものを経由して結果を取得する(B)f: PartialFunction[(L,L),P] and then get the result via something like
としてパスファインダーを定義します
Option[P]
を返す関数を使用しているようですが、結果が二重に評価されることはありません。そのため、高価な計算では、結果がキャッシュされない限り、これが好ましい場合があります。 Option
のように、任意の入力署名を持つことができますが、PartialFunction
は単一の引数を期待しているようです。しかし、私は特にScalaライブラリとのやりとりのように、あまり直接的ではなく、より大きな「大きな画像」を考慮する現実的な経験を持つ人物からの意見に興味があります。 PartialFunction
を使用すると、他の方法で恩恵を受けるコレクションAPIの特定のメソッドを利用できるようにする上で、大きなメリットがありますか?そのようなコードは一般的に簡潔でしょうか?
関連が異なる質問:
- Inverse of PartialFunction's lift method
- Is the PartialFunction design inefficient?
- How to convert X => Option[R] to PartialFunction[X,R]
- Is there a nicer way of lifting a PartialFunction in Scala?
- costly computation occuring in both isDefined and Apply of a PartialFunction