我是
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 }
现在您的原始版本将按预期工作.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。