Scala:运算符模式匹配

时间:2017-12-21 15:09:31

标签: scala pattern-matching operators

Scala可以与运营商进行模式匹配吗? 我想输入一个元组,例如("Hello World", +)("Good Afternoon", /),并为不同的运算符执行不同的操作,例如:

mytuple match {
  case (SomeRegex(str), +) => println(str + " the same")
  case (SomeRegex(str), /) => println(str + " but different")
}

我怎样才能正确地做到这一点?我不关心操作员做什么,我只想把它们作为一种环境

甚至可以将char +/传递给最佳实践,但我几乎不相信。

1 个答案:

答案 0 :(得分:1)

+*来自哪里? mytuple的类型是什么?

根据您的回答,这可能是一个合理的答案。

该语言并未真正将*+公开为对象(至少不像你想要的那样)。

sealed trait Op
case object `+` extends Op
case object `*` extends Op
// ...

掌握这些定义......

def dispatch(mytuple: (String, Op)): Unit =
  mytuple match {
    case (SomeRegex(str), `+`) => println(str + " the same")
    case (SomeRegex(str), `*`) => println(str + " but different")
    case _ => ()
  }

您可以处理+*(或解析器可能已经处理过的任何其他字符串:def type class some identifier with spaces )将它们包装在`s中作为常规标识符。