Ele*_*fee 3 scala pattern-matching
我正在编写一个简单的解析器,它使用 Scala 的模式匹配功能。
然而,在可变数量的令牌之后解析一些东西似乎很麻烦。
有没有办法让我做如下事情:
def parse(toks: List[Token]) = toks match {
case FuncDef :: Id(v) :: LeftParen :: { args } :: RightParen :: Nil =>
// impl goes here
}
Run Code Online (Sandbox Code Playgroud)
哪里{ args }是子列表。
所以说如果Token列表看起来像这样:
List(FuncDef, Id("foo"), LeftParen, Id("x"), Id("y"), Id("z"), RightParen)
Run Code Online (Sandbox Code Playgroud)
{ args } 然后会匹配 Id("x"), Id("y"), Id("z")
这是可行的,还是我需要去做这个
def parse(toks: List[Token]) = toks match {
case FuncDef :: Id(v) :: LeftParen :: tail =>
// impl goes here
}
Run Code Online (Sandbox Code Playgroud)
然后去手动检查是否RightParen出现在正确的位置tail?
您可以使用:+匹配器拆分 any 的最后一个元素Seq。所以完整的匹配表达式看起来像这样:
case FuncDef +: Id(v) +: LeftParen +: args :+ RightParen =>
Run Code Online (Sandbox Code Playgroud)
For 列表+:基本上等价于::,所以我在这里使用它是为了与:+.