scala匹配器中的多源提取

时间:2013-09-02 16:59:40

标签: scala

我经常发现自己想要将多个匹配器/提取器聚集到一行中,但似乎不允许这样做。 e.g:

text match {
  case regex1(a) | regex2(a) => a + "-"
}

(即使a与两个匹配器的类型相同)

所以我不得不像这样重构(当有几个这样的时候会变得丑陋,所有处理不同的匹配,混合内联响应)

text match {
  case regex1(a) => op(a)
  case regex2(a) => op(a)
}

def op(a: String) = a + "-"

有更干净的方式吗?这将在Scala中得到支持吗?

1 个答案:

答案 0 :(得分:3)

,这在一般情况下是不可能的。但是,有一些解决方法可能用于组合模式匹配案例:

  • 匹配您愿意分组的超级类别
  • 使用case a @ _ if boolexpr(a) or boolexpr(a) =>构建
  • 对函数中的公共代码进行分解,就像您在示例中所做的那样

可能还有其他人。我认为这不会很快改变,因为它会鼓励写出神秘的机器/箱子。