2017-10-21 90 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) –