[英]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.