gpt4 book ai didi

scala - Scala中的嵌套与展平模式匹配

转载 作者:行者123 更新时间:2023-12-04 15:29:20 28 4
gpt4 key购买 nike

假设我在 Scala 中有 n 个值,名为 v1 , v2 , ..., , ..., 越南 类型 蒂杰对于不同的 i,它们不一定是不同的类型。我想使用自定义逻辑对 n 个值进行模式匹配。

一种方法是嵌套所有可能性,以防我需要详尽无遗(为了这个示例,我需要这样做,否则我可以使用占位符 mag _ c)并且我无法合并分支(其中为了这个例子,我不能因为每个自定义逻辑都是唯一的):

v1 match {
case x1: T11 => v2 match {
case x2: T21 => v3 match {
...
case xn_1: Tn_11 => vn match {
case xn: Tn1 => // Custom logic 1.
case xn: Tn2 => // Custom logic 2.
...
case xn: Tnk => // I am already laughing, but I have to write it down:
// Custom logic k.
}
...
...
}
case x2: T22 => v3 match {
// I guess you get the point.
}
...
case x1: T12 => v2 match {
// And so on until exhaustion in every meaning of the word.
}
... // These three dots are needed here. Now I feel whole.
}

另一种选择是将整个该死的东西展平:
(v1, v2, ..., vn) match {
case (x1: T11, x2: T21, ... xn: Tn1) => // Custom logic 1.
case (x1: T11, x2: T21, ... xn: Tn2) => // Custom logic 1.
...
case (x1: T11, x2: T21, ... xn: Tnk) => // Custom logic k (with a hearthy chuckle).
... // Three dots saving my soul and my finger joints.
}

虽然嵌套版本避免了重复输入,但当 n 很高(而我们不是)时,由于缩进溢出,它可能导致难以阅读的代码。

另一方面,扁平化版本包含大量重复代码,但更容易解释。

此外,嵌套版本似乎比检查 更高效。 xi 每种类型最多发生一次 蒂杰 (但也许我不应该关心诸如 JVM 可以将其全部优化掉的事情,而且我不想成为 all evil )。

哪一个是惯用的 Scala 代码,因此值得推荐?两个版本之间有性能差异吗?

最佳答案

您应该选择最能表达代码含义的选项,而不用担心性能。如果性能这个match对您的代码至关重要,那么您的设计就会遇到更大的问题。 (也不清楚一个性能优于另一个,因此基于假设性能进行选择是不明智的)。

如果每个 case导致一段独立的代码,然后有一个平坦的 match是最直接的逻辑表达。添加虚假嵌套只会使事情变得困惑。

如果两个或多个 case 之间有一些共同的代码表达式然后它们可以被分组到嵌套 match语句,以便不重复公共(public)代码。如果您想在代码中表达的多个案例之间存在一些逻辑共性,这也可能适用。

另请注意,您可以使用 orElse 链接部分函数它允许您拆分一个大的match到具有有意义名称的单独函数中,同时避免嵌套 match陈述。

关于scala - Scala中的嵌套与展平模式匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54305206/

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