它是我第一次使用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