我是一个相对的 Scala 初学者,想要一些关于如何继续实现的建议,看起来它可以通过函数返回 Option 或 PartialFunction 来完成。我已经阅读了我能找到的所有相关帖子(见问题底部),但这些似乎涉及使用 PartialFunction 或将一个转换为另一个的技术细节;我正在寻找“如果情况是 X、Y、Z,则使用 A,否则使用 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
finders.filter(_.isDefined((l1,l2))).map(_.apply((l1,l2)))`
似乎使用返回函数Option[P]
可以避免对结果进行双重评估,因此对于昂贵的计算,这可能是可取的,除非缓存结果。似乎使用Option
一个可以具有任意输入签名,而PartialFunction
需要一个参数。但我特别想听到有实践经验的人关于不太直接、更“大局”的考虑,例如与 Scala 库的交互。使用PartialFunction
集合 API 的某些方法是否有显着的好处,而这些方法可能会以其他方式得到回报?这样的代码通常会更简洁吗?
相关但不同的问题: