是否有可能有共同的递归类型Scala呢?
我有一个的错误追踪系统问题列表的XML文件。 它的原始数据。 该模型有不同的问题类型,如“任务”,“子任务”,“臭虫”,“特殊的错误”。
现在,我想我的原始数据解析到任务和子任务的层次结构:
// data type for field contents
abstract class Field
case class Id(raw : string) extends Field
case class Status(raw : string) extends Field
...
// data type for primary model
abstract class Issue(id : String, ...)
case class Task(id : Id, status : Status ..., subtasks : List[Subtask] ) extends Issue(id, ...)
case class Subtask(id : Id, status : Status ..., parent: Task) extends Issue(id, ...)
我不知道这是否相互递归在理论上是可能的吗?
第二个问题:
我渲染模型的一些维基的标记。 这工作得很好用重载递归渲染():字符串在类的数据类型。 (或许我应该有一个“渲染”超类!?)
什么是用于分析最彻底的方法,也就是我想有一个递归
fromXML : scala.xml.Elem => Issue / Field
我会放在哪里呢? 它会是什么样子? IIUC,同伴是自动生成的情况下类,所以我不能给它添加?
我有这样的例如:
def fromXml(e : Elem) = e match {
case <a>test</a> => Id("test")
case _ => Status("Pre-analysed")
}
但是,我没有给功能的类型。 什么是该函数的类型?
我也想过直接传递XML:马到ADT的构造函数,那会是聪明? 或者我应该分开XML的解析和模型的创造?
耶稣,学习斯卡拉基本知识,并做一些脚本和函数(想太多JAVA)之后,我终于明白了如何写抽象数据类型,可以表达自己几乎一样的好老哈斯克尔次:-)