Scala 模式匹配默认守卫

标签 scala pattern-matching

我想在每个语句前面用相同的守卫做许多 case 语句。我可以用不需要代码重复的方式来做吗?

"something" match {
   case "a" if(variable) => println("a")
   case "b" if(variable) => println("b")
   // ...
 }

最佳答案

您可以创建一个提取器:

class If {
  def unapply(s: Any) = if (variable) Some(s) else None
}
object If extends If
"something" match {
  case If("a") => println("a")
  case If("b") => println("b")
  // ...
}

关于Scala 模式匹配默认守卫,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12007234/

相关文章:

java - 检查字符串中的大写字母并找到位置

scala - 使 Scala 3 中的非详尽匹配编译失败

scala - 多态类型的类型类遭受类型删除

java - 了解 spark 中的 DAG

在平面映射 AnyRef* 后,Scala 无法解析正确的重载 SLF4J 方法

java - 模式匹配以获取值

scala - 具有类型变量的类型模式的用例和示例

scala - Scala 中的字符串范围

python - 使用正则表达式将韩文文本解析为列表

带参数的Scala提取器