我是一個相對的斯卡拉初學者,想就如何在這似乎是它可以用函數返回選項或PartialFunction做一個着手實施一些建議。我已經閱讀了所有我能找到的相關帖子(參見問題底部),但這些帖子似乎涉及使用PartialFunction或將一個轉換爲另一個的技術細節;我正在尋找類型的答案「如果情況是X,Y,Z,然後使用A else B,但也考慮C」。斯卡拉:選擇函數返回選項與PartialFunction
我的示例用例是使用路徑查找器庫位置之間的路徑搜索。說的位置是L
型的,一個路徑是P
類型和所需的路徑搜索的結果將是一個Iterable[P]
。應該通過詢問所有路徑查找器(在Google地圖中,這些可能是Bicycle,Car,Walk,Subway等)來獲取路徑建議,這些路徑建議可以或不可以爲特定的開始/結束位置對。
似乎那裏是去這兩種方式:
(一)定義路徑查找器作爲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集合方法方面具有顯着優勢?這樣的代碼通常會更簡潔嗎?
相關但不同的問題:
- 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