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中。