2017-10-21 8 views
0

ここで自己シンボルが認識されないのはなぜですか?私はScala 2.12を使用しています。Scalaは、Trait内でcaseクラスから認識されません

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)。 –

関連する問題