gpt4 book ai didi

scala - 简化大规模匹配案例 - Scala

转载 作者:行者123 更新时间:2023-12-04 21:59:50 26 4
gpt4 key购买 nike

所以在我们有这个巨大的地方之一 variable match case陈述。

包含近 150 个不同的 case声明

看起来很可怕。

我想把它分解成更小的函数,我可以将匹配项分成 10 个部分,然后是数字 case语句归结为大约 15 个。这很好。

目前看起来像这样

massiveCaseVariable match {
case "one" => 1
case "two" => 2
case "three" => 3
case "four" => 4
case "five" => 5
case "six" => 6
}

但我不想这样做
massiveCaseVariable match {
case "one" || "two" || "three" => firstCategory(massiveCaseVariable)
case "four" || "five" || "six" => secondCategory(massiveCaseVariable)
}

def firstCategory(caseVariable: String): Int =
caseVariable match {
case "one" => 1
case "two" => 2
case "three" => 3
}

def secondCategory(caseVariable: String): Int =
caseVariable match {
case "four" => 4
case "five" => 5
case "six" => 6
}

太重复了。有没有更好更简洁的方法来做到这一点?

我在 Scala 2.11

PS:示例仅用于说明目的。我绝对不是试图将字符串与整数匹配

最佳答案

如果您想简单地组合您的匹配项,那么您会注意到这些实际上是部分函数(因为匹配可能会失败):

val firstCategory: PartialFunction[String, Int] = {
case "one" => 1
case "two" => 2
case "three" => 3
}

val secondCategory: PartialFunction[String, Int] = {
case "four" => 4
case "five" => 5
case "six" => 6
}

可以组合:
val all = firstCategory orElse secondCategory
all("one")

有趣的是,许多集合都是部分函数,​​例如 Map , 所以:
val firstCategory = Map[String, Int](
"one" -> 1,
"two" -> 2,
"three" -> 3
)

val secondCategory = Map[String, Int](
"four" -> 4,
"five" -> 5,
"six" -> 6
)

val all = firstCategory ++ secondCategory
all("one")

在这个例子中应该以相同的方式工作。

关于scala - 简化大规模匹配案例 - Scala,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55900506/

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