[英]Scala's parser combinator: parse an option
说我有一个这样的解析器:
trait PT {}
trait StatementPT extends PT{}
...
class LoopConditionPT(val operation: String, val variable: IdentPT, val condition: Option[(String,ExpressionPT)]) extends StatementPT { ... }
Option[(String,ExpressionPT)])
困扰了我一天,我的意思是我可以处理Option[T]
,但是Option[(T,T)]
吗? 我写了这个def loopCondition
但它总是会引发错误:
def loopCondition: Parser[LoopConditionPT] = "some string" ~ var ~ opt(("TIL"|"WILE") ~ expression) ^^ {
case a ~ b ~ Some(c ~ d) => new LoopCondition(a, b, Option[(c, d)])
case a ~ b ~ None => new LoopCondition(a, b, Option[("None", -1)])
有人可以帮我修复loopCondition
吗? 谢谢。
[]
用于表示类型。 当您想创建一个Option
(即调用Option.apply()
,请使用括号而不是方括号。 所以代替
new LoopCondition(a, b, Option[(c, d)])
说
new LoopCondition(a, b, Option((c, d)))
或者您可以将语法糖用于元组并说
new LoopCondition(a, b, Option(c -> d))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.