私は比較的 Scala の初心者であり、Option を返す関数または PartialFunction のいずれかを使用して実行できるように思われる実装を進める方法についてアドバイスをお願いします。関連するすべての投稿を見つけましたが (質問の下部を参照)、これらには PartialFunction の使用または一方から他方への変換の技術的な詳細が含まれているようです。「状況がX、Y、Zの場合、Aを使用するか、Bを使用しますが、Cも検討してください」というタイプの回答を探しています。
私の使用例は、パス ファインダーのライブラリを使用した場所間のパス検索です。場所のタイプがL
で、パスのタイプがP
で、目的のパス検索結果がIterable[P]
. パッチの検索結果は、すべてのパス ファインダー (Google マップのようなものでは、自転車、車、徒歩、地下鉄など) にパスの提案を求めることによって組み立てる必要があります。終了位置のペア。
これについては、次の 2 つの方法があるようです。
(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
finders.filter( _.isDefined( (l1,l2) ) ).map( _.apply( (l1,l2)) )`として定義します。
返される関数を使用すると結果の二重評価が回避されるように思われるOption[P]
ため、結果をキャッシュしない限り、高価な計算の場合はこれが望ましい場合があります。また、単一の引数を期待しているのOption
に対し、任意の入力署名を持つことができるように見えます。PartialFunction
しかし、Scala ライブラリとのやり取りなど、直接的ではなく、より「全体像」に関する考慮事項について、実務経験のある人からの意見を聞くことに特に興味があります。を使用するPartialFunction
と、コレクション API の特定のメソッドを利用できるようになり、他の方法で成果が得られる可能性がありますか? そのようなコードは一般的により簡潔になりますか?
関連するが異なる質問: