4

我经常发现自己想将多个匹配器/提取器聚集到一行中,但这似乎是不允许的。例如:

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 会支持这一点吗?

4

1 回答 1

3

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

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

可能还有其他人。我认为这不会很快改变,因为它会鼓励编写神秘的马赫/案例。

于 2013-09-02T17:18:57.960 回答