【发布时间】:2013-12-13 15:31:43
【问题描述】:
这是我第一次使用 scala 的解析器组合器。 我有这种情况,我有一个“类型”列表,它们可以扩展其他类型,也可以不扩展。 如果他们这样做,我只需在类型与其父类型之间创建一个映射。 如果不是,我只是将类型映射到“对象”。 (类型只是字符串名称)
它们是这样写的:
type1 type2 type3 - parentType
或
type0a type0b
在这种情况下,它们将隐含为- object
我尝试通过以下方式实现它,但它没有编译。它说它需要一个 Option[~List[String, String] 并且它找到了~[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 丢失,它应该默认为“对象”。
如何最好地解决这个问题?
【问题讨论】: