/ / Scala mit impliziter Klasse, gekoppelt mit impliziten Konvertierungen - scala, parsing, playframework-2.0, implizit

Scala mit impliziter Klasse, gekoppelt mit impliziten Konvertierungen - scala, parsing, playframework-2.0, implizit

Ich versuche, meinem Parser auf der Basis von RegexParsers nicht-backtracking ~> und <~ hinzuzufügen.

RegexParser implementieren implicit def literal(s: String): Parser[String] Hexe implizit eine Zeichenfolge zu einem Parser tranformieren [String]

jetzt füge ich hinzu:

`object implicits{

implicit class helper[T](parser  : Parser[T])  {
def ~>! [U](q: => Parser[U]): Parser[U] = parser ~! q ^^ {case a ~ b => b} named ("~>!")
def <~! [U](q: => Parser[U]): Parser[T] = parser ~! q ^^ {case a ~ b => a} named ("<~!")
}
}

Hexe ist meine implizite Klasse.

Aber ich habe eine seltsame Sache gesehen

def groupe : Parser[Group] =  "group(" ~>! identifier <~!  ")"

Bezeichner ist ein Parser

Hier bekam ich einen Fehler, wenn der String im Klassenparameter übergeben wurde "group(" ~>! identifier weil das Implizite nicht gemacht wird und der Compiler nach ~> sucht! innerhalb der Zeichenfolge.

aber wenn es im Methodenparameter übergeben wird identifier <~! ")" die String-> Parser [String] implizite Arbeit.

Ist es ein Scala Bug oder ich vermisse etwas?

Antworten:

1 für die Antwort № 1

Es ist kein Bug. Das Problem ist das zu lösen ~>! auf String Der Compiler müsste zwei implizite Konvertierungen verketten: von String zu Parser und von Parser zu helper, das ist nicht erlaubt. Sie müssen also eine direkte Konvertierung von hinzufügen String zu helper:

implicit def stringToHelper(s: String): helper[String] = new helper(literal(s))

und auch von Regex zu helper Falls benötigt.