Scala可以与运营商进行模式匹配吗?
我想输入一个元组,例如("Hello World", +)
或("Good Afternoon", /)
,并为不同的运算符执行不同的操作,例如:
mytuple match {
case (SomeRegex(str), +) => println(str + " the same")
case (SomeRegex(str), /) => println(str + " but different")
}
我怎样才能正确地做到这一点?我不关心操作员做什么,我只想把它们作为一种环境。
甚至可以将char +
或/
传递给最佳实践,但我几乎不相信。
答案 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中作为常规标识符。