gpt4 book ai didi

scala - 如何为类使用 scala switch 语句

转载 作者:行者123 更新时间:2023-12-01 22:21:33 25 4
gpt4 key购买 nike

我正在尝试在 scala 中编写一个函数,该函数将根据多个 case 语句返回一个 Boolean

def my_func(result : Result) : Boolean = {
labResult match {
case (result.name == "test" && result.value >= 10) => false
//more case statements
}
}

但是我在 && 上遇到编译错误。有什么方法可以做到这一点?

最佳答案

使用带有提取器的守卫

case class Result(name: String, value: Int)

def my_func(result: Result): Boolean = result match {
case Result(name, value) if name == "test" && value >= 10 => false
}

你可以将相等条件带入提取器

def my_func(result: Result): Boolean = result match {
case Result("test", value) if value >= 10 => false
}

在 Scala 术语中,它不会切换为模式匹配。上面的代码是惯用的 Scala 代码,它具有带提取器的模式匹配守卫。

不要忘记给出条件不成立的情况,否则你会得到匹配错误

case class Result(name: String, value: Int)

def my_func(result: Result): Boolean = result match {
case Result(name, value) if name == "test" && value >= 10 => false
case _ => true //if above condition fails to match
}

如果你有额外的参数然后使用_忽略

case class Result(name: String, value: Int, foo: Int)

def my_func(result: Result): Boolean = result match {
case Result(name, value, _) if name == "test" && value >= 10 => false
case _ => true //if above condition fails to match
}

在上面的代码中,我们使用 _ 忽略了 foo。

请注意,我们可以使用多个 _ 来忽略多个参数。我们可以在两者之间使用 _,就像这样 Result(name, _, foo)。这里我们忽略了 value 参数

如果 Result 不是 case class,则模式匹配期间的参数提取不起作用因此您必须为 Result 类编写自定义提取器。

注意 Scala 编译器会为您编写一个提取器以处理案例类。在普通类的情况下,我们必须编写提取器以使用提取的参数进行模式匹配才能工作

class Result (val name: String, val value: Int, val foo: Int)

object Result {
def unapply(result: Result): Option[(String, Int, Int)] = Some((result.name, result.value, result.foo))
}

def my_func(result: Result): Boolean = result match {
case Result(name, value, _) if name == "test" && value >= 10 => false
case _ => true //if above condition fails to match
}

关于scala - 如何为类使用 scala switch 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39746614/

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