2017-10-21 134 views
0

爲什麼自我符號不被識別在這裏?我正在使用Scala 2.12。斯卡拉自我不承認案件類內特質

trait Parsers[ParseError, Parser[+_]] { 

    def or[A](s1: Parser[A], s2: Parser[A]): Parser[A] 

    case class ParserOps[A](p: Parser[A]) { 
    def |[B>:A](p2: Parser[B]): Parser[B] = self.or(p,p2) 
    def or[B>:A](p2: => Parser[B]): Parser[B] = self.or(p,p2) 
    } 

} 

回答

5

您還沒有定義self。定義它,它會工作。

trait Parsers[ParseError, Parser[+_]] { self => 

    def or[A](s1: Parser[A], s2: Parser[A]): Parser[A] 

    case class ParserOps[A](p: Parser[A]) { 
    def |[B>:A](p2: Parser[B]): Parser[B] = self.or(p,p2) 
    def or[B>:A](p2: => Parser[B]): Parser[B] = self.or(p,p2) 
    } 

} 
+0

作爲補充,下面是此功能相關文檔的鏈接(https://docs.scala-lang.org/tour/self-types.html) –