使用 Scala,有没有办法动态地构造一个列表模式以进行模式匹配?
例如,假设我正在使用稳定的标识符来解析字符串列表,如下所示:
def matchingAndDispatch(xs: List[String])= {
case `namespace` :: value :: `elementTerminator` :: rest => {
// Do Something...
}
case `openBracket` :: rest => {
// Do Something Else...
}
case `closeBracket` :: `elementTerminator` :: rest => {
// Or perhaps something else...
}
}
现在,假设会有很多 case 子句,我希望能够将它们存储在某种可以在运行时更改的集合中——不一定是模式本身,但模式的集合可以更改。我在下面的代码中组成了虚构的类 MatchClause 来或多或少地解释我的想法 - 基本上遍历一组模式(即匹配子句)并一次匹配一个:
def matchingAndDispatch(xs: List[String], matchingClauses:List[MatchClause])= {
if(!matchingClauses.empty){
case matchingClauses.head => {
// Do Something...
}
case _ => matchingAndDispatch(xs, matchingClause.tail)
}
}else throw new Error("no match")
Scala API 中有什么可以达到这个目的吗?我什么也没找到。或者也许我正在以错误的方式解决这个问题?