对于文件中的此输入:{right; left; straight}
我有这个解析器:
def conf: Parser[Any] = "{" ~> feat <~ "}"
def feat: Parser[Any] = repsep(expr, ";")
def expr = """[a-zA-Z]([a-zA-Z0-9]|[a-zA-Z0-9])*""".r
给了我这个输出:List(right, left, straight)
现在我需要在这个列表中使用这些元素来迭代它们,但我不能这样做,因为当我尝试使用for()循环时,它说&#34;值过滤器不是成员com.xxx.ParseResult [Any]&#34;。我如何迭代并从这个解析的List中获取值?
答案 0 :(得分:1)
: Parser[Any]
类型归档会产生解析Any
的结果,而不是代码其余部分所需的List[String]
。如果你消除它们,编译器将自己推断出Parser[List[String]]
的正确类型:
def conf = "{" ~> feat <~ "}"
def feat = repsep(expr, ";")
def expr = """[a-zA-Z]([a-zA-Z0-9]|[a-zA-Z0-9])*""".r
第二个问题是您尝试直接使用ParseResult
。您需要在其上调用.getOrElse
以获取其中包含的List[String]
,或者在解析失败时提供替代方法:
val ls = parseResult.getOrElse(throw new Exception("parsing failed"))