gpt4 book ai didi

scala - 从 Scala 案例类中提取值的最佳方法是什么?

转载 作者:行者123 更新时间:2023-12-01 07:14:29 24 4
gpt4 key购买 nike

提取我保存在案例类中的值的最佳和/或最简单的方法是什么?

以下面的代码为例:

abstract class Something
case class Foo(input: Int) extends Something
case class Bar(input: Double) extends Something

def someMethod(a: Something, b: Something) {
// code that extracts values goes here
}

someMethod(Foo(10), Foo(20))
someMethod(Bar(2.1), Bar(21.2))

然后我将如何从 a 中获取整数或 double 数本身和 b当我像在其定义下那样调用该方法时?

请注意,这两个参数都用于同一个方程中

最佳答案

如果类构造函数参数是 val,那么只需调用:

a.input
b.input

您还可以在 unapply 的帮助下使用提取器方法:
val Foo(val1) = a
val Bar(val2) = b

然后使用 val1val2
更新

然后你应该对你的值使用模式匹配:
value match {
case Foo(val1) => val1
case Bar(val1) => val1
}

它的工作原理就像 val Foo(val1) = a , 使用生成的 unapply类中的方法(提取器),它也是一个表达式,因此您将结果分配给变量

如果您有多个参数,只需根据您的参数数量更改 PatMat 构造,在您的情况下:
someMethod(a: Something, b: Something) = (a, b) match {
case (Foo(v1), Foo(v2)) => (v1, v2) // or any other logic with values
case (Foo(v1), Bar(v2)) => // logic for this case
... // logic for other cases
}

参数越多,您应该提供的案例越多,但如果您不需要它们,您可以使用空白案例
someMethod(a: Something, b: Something) = (a, b) match {
case (Foo(v1), Foo(v2)) => (v1, v2) // or any other logic with values
case _ =>
}

在这种情况下所有其他情况都将被忽略,不是最佳选择,导致结果类型不正确。你也可以黑色值
someMethod(a: Something, b: Something) = (a, b) match {
case (Foo(v1), _) => v1 // in such case you can work only with v1
... // logic for other cases
}

关于scala - 从 Scala 案例类中提取值的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16710781/

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