Scala:运算符模式匹配

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Scala:运算符模式匹配相关的知识,希望对你有一定的参考价值。

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

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

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

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

答案

+*会从哪里来? 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中。

以上是关于Scala:运算符模式匹配的主要内容,如果未能解决你的问题,请参考以下文章

在 Scala 的模式匹配系统中使用比较运算符

Scala 模式匹配详解

Scala 基础(十三):Scala 模式匹配

Scala 模式匹配

必会Scala之模式匹配和样例类

Scala总结之模式匹配