它是我第一次使用scala的解析器組合器。 我有這種情況,我有一個'類型'的列表,他們可以擴展其他類型,或不。 如果他們這樣做,我只是在類型和它的父類型之間創建一個映射。 如果不是,我只是將類型映射到「對象」。 (類型只是字符串名稱)解析器組合器可選部分
他們是這樣寫的:
type1 type2 type3 - parentType
或
type0a type0b
在這種情況下,他們將隱含地- object
我試圖執行它採用以下方式,但不編譯。它說它需要一個選項[〜列表[字符串,字符串],它發現〜[a,b]。它也表示它不能在第一個理解中找到價值名稱,事實上它是在案例模式匹配中指定的。現在有點混淆實際發生的事情。
def type_list = ((name+) ~ ("-" ~> parent_type)?) ^^ {
case names ~ parent_type => for (name <- names) yield name -> parent_type
case names => for (name <- names) yield name -> "object"
}
def name = """[a-zA-Z\d]+""".r
其實我只是希望這個返回一個Map[String, String]
,如果parent_type
缺少它應該默認爲「對象」。 如何最好地解決這個問題?
謝謝......這些單子仍設法把我偏離了軌道。感謝更簡單的版本。 – jbx