gpt4 book ai didi

scala - 存在通配符时使用 orElse 组合 PartialFunctions

转载 作者:行者123 更新时间:2023-12-01 10:19:20 25 4
gpt4 key购买 nike

当第一个函数具有 case _ => 通配符模式时,是否有可能 orElse 组成两个 PartialFunction 匹配因此有效的任何内容是一个总函数。

例如给定

val pf1: PartialFunction[Int, String] = {
case 1 => "foo"
case 2 => "bar"
case _ => "wildcard"
}

val pf2: PartialFunction[Int, String] = {
case 3 => "baz"
case _ => "wildcard"
}

然后,开箱即用

(pf1 orElse pf2)(3)

输出通配符。但是,假设我们不能修改 pf1,我们可以使用一些 compfnpf2 组合,这样我们就能生效

{
case 1 => "foo"
case 2 => "bar"
case 3 => "baz"
case _ => "wildcard"
}

哪里 (pf1 compfn pf2)(3) 会输出 baz

最佳答案

您可以通过执行第二个匹配 将“通配符”结果转换为失败的匹配,将pf1 转换为真正的部分函数。

val pf3: PartialFunction[Int, String] = (i: Int) => pf1(i) match {
case s if s != "wildcard" => s
}

然后

(pf3 orElse pf2)(3)

如果你想要你展示的精确语法,那么你需要使用隐式类:

implicit class addCompfn(f1: PartialFunction[Int, String]) {
def compfn(f2: PartialFunction[Int, String]) = (i: Int) => f1(i) match {
case s if s != "wildcard" => s
case s => f2(i)
}
}

然后

(pf1 compfn pf2)(3)

关于scala - 存在通配符时使用 orElse 组合 PartialFunctions,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55869392/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com