所以我有这样的事情:
class MyParser extends JavaTokenParsers {
var m = new HashMap[String,String]
def store = ("var" ~> ident "=") ~ ident ^^ {
case k ~ v => m += k -> v
}
def stored_val = ident ^^ {
case k => m(k)
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题是我真正想做的是让解析器stored_val失败,以便其他解析器有机会匹配输入.但现在发生的是当地图无法找到值时会抛出.
我尝试像这样实现stored_val:
def stored_val = ident => {
case k => if (m.contains(k)) m(k) else failure("identifier not found")
}
Run Code Online (Sandbox Code Playgroud)
但问题是失败返回Parser [Nothing],它与String不同.
scala ×1