我读到了这个问题:Link
这是一段代码,它接受了答案:
/** A parser that matches a regex string */
implicit def regex(r: Regex): Parser[String] = new Parser[String] {
def apply(in: Input) = {
val source = in.source
val offset = in.offset
val start = handleWhiteSpace(source, offset)
(r findPrefixMatchOf (source.subSequence(start, source.length))) match {
case Some(matched) =>
Success(source.subSequence(start, start + matched.end).toString,
in.drop(start + matched.end - offset))
case None =>
Failure("string matching regex `"+r+"' expected but `"+in.first+"' found", in.drop(start - offset))
}
}
}
我不理解代码的某些部分:
你能解释一下这些部分吗?
答案 0 :(得分:0)
Input
是来自Parsers库的scala-parser-combinators中的类型别名。
在撰写答案时,解析器组合器仍然在scala standard library。从Scala 2.11开始,它们已被删除。
Parsers
(以及RegexParsers
的文档,我猜的更具体地说是这里使用的内容)type Input = Reader[Elem]
,所以{{ 1}}是包含Reader
和source
字段的类型。
offset
定义了一个扩展new Parser { ... }
的匿名类。