解析 – Scala中解析器成功的模式匹配
发布时间:2020-12-16 19:00:27 所属栏目:安全 来源:网络整理
导读:我是 Scala的新手,并一直在尝试使用其出色的组合解析器库.我一直在尝试编译这段代码: import scala.util.parsing.combinator._...val r:Parsers#ParseResult[Node] = parser.parseAll(parser.suite,reader)r match { case Success(r,n) = println(r) case F
我是
Scala的新手,并一直在尝试使用其出色的组合解析器库.我一直在尝试编译这段代码:
import scala.util.parsing.combinator._ ... val r:Parsers#ParseResult[Node] = parser.parseAll(parser.suite,reader) r match { case Success(r,n) => println(r) case Failure(msg,n) => println(msg) case Error(msg,n) => println(msg) } ... 但我不断收到这些错误: TowelParser.scala:97: error: not found: value Success case Success(r,n) => println(r) ^ TowelParser.scala:98: error: not found: value Failure case Failure(msg,n) => println(msg) TowelParser.scala:99: error: object Error is not a case class constructor,nor does it have an unapply/unapplySeq method case Error(msg,n) => println(msg) 我尝试了很多不同的东西,比如: case Parsers#Success(r,n) => println(r) 和 case Parsers.Success(r,n) => println(r) 和 import scala.util.parsing.combinator.Parsers.Success 但我似乎无法将其编译.我确信可能有一些明显的东西我不见了,但我已经有一段时间了,谷歌似乎没有任何好的例子. 谢谢! 解决方法
您需要指定ParseResult的完整路径,其中包括您的Parsers实例.例如:
import scala.util.parsing.combinator._ object parser extends RegexParsers { def digits = "d+".r ^^ (_.toInt) } val res = parser.parseAll(parser.digits,"42") res match { case parser.Success(r,n) => println(r) case parser.Failure(msg,n) => println(msg) case parser.Error(msg,n) => println(msg) } 请注意,如果您想要一些额外的语法便利,您也可以导入它们: import parser.{ Error,Failure,Success } 现在您的原始版本将按预期工作. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |