尝试添加非回溯〜>和<〜我的解析器基于RegexParsers。
RegexParsers实现implicit def literal(s: String): Parser[String]
隐式将字符串转换为解析器[String]
现在我添加:
`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 ("<~!")
}
}
巫婆是我隐含的阶级。
但是我看到了一件奇怪的事情
def groupe : Parser[Group] = "group(" ~>! identifier <~! ")"
标识符是解析器
这里我在类参数"group(" ~>! identifier
中传递字符串时出错,因为没有隐式,编译器查找〜&gt;!在String中。
但是当它在方法参数identifier <~! ")"
中传递时,String-&gt; Parser [String]隐式工作。
它是Scala错误还是我错过了什么?
答案 0 :(得分:1)
这不是一个错误。问题是要在~>!
上解决String
,编译器必须链接两个隐式转换:从String
到Parser
以及从Parser
到{{1 },这是不允许的。因此,您需要添加从helper
到String
的直接转换:
helper
以及必要时从implicit def stringToHelper(s: String): helper[String] = new helper(literal(s))
到Regex
。