2014-09-23 194 views
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及其成員:源,偏移

你能解釋這些部分給我嗎?

回答

0

Input是來自scala-parser-combinators庫的Parsers中的類別別名。

在寫回答時,解析器組合器仍在scala standard library中。從Scala 2.11開始它們被刪除。

的文檔爲Parsers(也爲RegexParsers,我猜是更具體什麼正在這裏使用)說:type Input = Reader[Elem],所以Reader是具有sourceoffset字段類型。

new Parser { ... }定義了一個匿名類,它擴展了Parser[String]

+0

對不起。在這種情況下什麼是別名,因爲我確定正則表達式沒有成員源和偏移?那麼第一部分呢,我們怎樣才能在「新」之後定義花括號和應用方法呢?關於該版本,我仍然使用2.9.2所以它不應該是一個問題。 – Tr1et 2014-09-23 07:47:22

+0

它在文檔中說:type Input = Reader [Elem]。閱讀器有源和偏移量字段。 – 2014-09-23 08:29:10

+0

帶花括號的'new'定義了一個擴展Parser [String]的匿名類。 – 2014-09-23 08:34:38