Scala:运算符模式匹配

问题描述 投票:1回答:1

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

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

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

也许甚至通过char +or /被认为是最好的做法,但我几乎不相信。

scala pattern-matching operators
1个回答
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中。

© www.soinside.com 2019 - 2024. All rights reserved.