Scala 在列表中间匹配子列表
我正在编写一个简单的解析器,它使用Scala的模式匹配功能 然而,解析在数量可变的令牌之后出现的东西似乎相当麻烦 我有没有办法做以下事情:Scala 在列表中间匹配子列表,scala,pattern-matching,Scala,Pattern Matching,我正在编写一个简单的解析器,它使用Scala的模式匹配功能 然而,解析在数量可变的令牌之后出现的东西似乎相当麻烦 我有没有办法做以下事情: def parse(toks: List[Token]) = toks match { case FuncDef :: Id(v) :: LeftParen :: { args } :: RightParen :: Nil => // impl goes here } 其中,{args}是一个子列表 因此,如果标记列表如下所示: Lis
def parse(toks: List[Token]) = toks match {
case FuncDef :: Id(v) :: LeftParen :: { args } :: RightParen :: Nil =>
// impl goes here
}
其中,{args}
是一个子列表
因此,如果标记
列表如下所示:
List(FuncDef, Id("foo"), LeftParen, Id("x"), Id("y"), Id("z"), RightParen)
case FuncDef +: Id(v) +: LeftParen +: args :+ RightParen =>
{args}
将匹配Id(“x”)、Id(“y”)、Id(“z”)
这是可行的,还是我需要去做
def parse(toks: List[Token]) = toks match {
case FuncDef :: Id(v) :: LeftParen :: tail =>
// impl goes here
}
然后手动检查RightParen
是否出现在tail
中的正确位置?您可以使用匹配器分割任何Seq
的最后一个元素。因此,完整匹配表达式如下所示:
List(FuncDef, Id("foo"), LeftParen, Id("x"), Id("y"), Id("z"), RightParen)
case FuncDef +: Id(v) +: LeftParen +: args :+ RightParen =>
对于列表,+:
基本上等同于:
,因此我在这里使用它与:+
对称