Scala - 什么是输入类型,Input.Source和Input.Offset是什么意思?

时间:2014-09-23 07:12:28

标签: scala

我读到了这个问题: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))
      }
    }
  }

我不理解代码的某些部分:

  • 花括号之间的代码就像是在定义一个新类,虽然它是" new Parser [String]"我知道的是创建类Parser [String]
  • 的新瞬间
  • 在代码中,有一个函数apply应用类型为Input的参数,但我没有在Scaladoc及其成员上找到任何类似的类:source,offset

你能解释一下这些部分吗?

1 个答案:

答案 0 :(得分:0)

Input是来自Parsers库的scala-parser-combinators中的类型别名。

在撰写答案时,解析器组合器仍然在scala standard library。从Scala 2.11开始,它们已被删除。

Parsers(以及RegexParsers的文档,我猜的更具体地说是这里使用的内容)type Input = Reader[Elem],所以{{ 1}}是包含Readersource字段的类型。

offset定义了一个扩展new Parser { ... }的匿名类。