【发布时间】:2016-05-18 11:11:26
【问题描述】:
我正在尝试想出一个组合器,它可以让我做这样的事情:
def pfAdapter(pf: PartialFunction[String, String]): PartialFunction[(String,String), String]) = {
case (a,b) if(pf.isDefinedAt(a)) => pf(a)
}
基本上,我有一个Map[String, String],并希望将其用作带有两个参数的PartialFunction - 忽略第二个元素,并使用第一个元素作为键。
上面的方法有效,但我不喜欢 pf 基本上被评估两次(可能没有办法解决),而且它不是“优雅”......我想知道是否有某种我不知道的组合器会让我做类似{ _._1 } andThen pf 的事情。显然,最后一次尝试不起作用,因为它的结果总是被定义的,并且只会在不存在的键上失败,我只是用它来说明我正在寻找的解决方案的理想外观。
有什么想法吗?
【问题讨论】:
-
所以如果密钥不存在,你可以例外吗?还是我错过了什么?
-
不,我想要一个在元组上定义的 PartialFunction,它的第一个元素作为映射中的键出现。没有例外:)
-
那它是怎么偏的呢?当第一个元素不存在时,期望的结果是什么?
-
像任何偏函数一样:如果您使用其域之外的值调用它,则会出现异常。所以,从这个意义上说,是的,我可以接受 :)。这个想法,但是我们永远不要在这些值上调用它,因为它会正确定义
lift、isDefinedAt、orElse等。 -
啊哈!那么,
if(pf.isDefinedAt(a)) => pf(a)和=> pf(a)不完全一样吗?如果 pf 在 a 处定义,两者都将起作用,如果没有,则给出异常
标签: scala partialfunction