我正在尝试从parboiled2尝试这个例子
scala> class MyParser(val input: org.parboiled2.ParserInput)
extends org.parboiled2.Parser {
def f = rule { capture("foo" ~ push(42))
}
}
defined class MyParser然后,我使用MyParser的输入创建了一个新的"foo"。
scala> new MyParser("foo").f
res11: org.parboiled2.Rule[shapeless.HNil,shapeless.::
[Int,shapeless.::[String,shapeless.HNil]]] = null但是返回值是null。
如何从REPL运行这个简单的f规则?
发布于 2015-03-24 02:13:48
rule是一个宏,使用rule定义的方法不打算在其他规则的上下文或对run()的调用之外引用。因此,如果您有以下内容:
import org.parboiled2._
class MyParser(val input: ParserInput) extends Parser {
def f = rule { capture("foo" ~ push(42)) }
}您可以这样使用它(为了清晰起见,清理了类型):
scala> new MyParser("foo").f.run()
res0: scala.util.Try[Int :: String :: HNil] = Success(42 :: foo :: HNil)如果您不想要一个Try,您可以使用另一个交付计划。
https://stackoverflow.com/questions/29223741
复制相似问题