0
我读了这个问题:LinkScala - 什么是类型输入,Input.Source和Input.Offset是什么意思?
这是一个代码块,其接受的答案:
/** 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))
}
}
}
我不明白的代码的某些部分:花括号之间
- 代码就像是它定义了一个新类,虽然之前它是“新的Parser [String]”,我知道的是创建类Parser的新时刻[String]
- 在代码中,有一个fu应用类型输入的参数,但我没有发现任何类似Scaladoc及其成员:源,偏移
你能解释这些部分给我吗?
对不起。在这种情况下什么是别名,因为我确定正则表达式没有成员源和偏移?那么第一部分呢,我们怎样才能在“新”之后定义花括号和应用方法呢?关于该版本,我仍然使用2.9.2所以它不应该是一个问题。 – Tr1et 2014-09-23 07:47:22
它在文档中说:type Input = Reader [Elem]。阅读器有源和偏移量字段。 – 2014-09-23 08:29:10
带花括号的'new'定义了一个扩展Parser [String]的匿名类。 – 2014-09-23 08:34:38