gpt4 book ai didi

scala - 为什么 scala.xml.Atom 类型参数化?

转载 作者:行者123 更新时间:2023-12-05 00:38:53 26 4
gpt4 key购买 nike

我注意到 scala.xml.Atom接受一个类型参数 A ,即使它的所有子类都扩展了 Atom[String] ,并且文档说“Atom 类为文本 (PCDATA) 提供了一个 XML 节点”。

是否有使用字符串以外的类型参数实例化 Atom 的合法用例?

更具体地说,我有兴趣使用 Scala XML 文字来定义一种很好的 DSL,用于定义基于内存树的文档结构,其中许多节点将是现有的 Scala 类。使用 <document>{new JButton("Hi")}</document> 会 super 好用并访问 Atom[JButton] 中的非文本数据无需为每个现有类定义 XML 序列化方案。

这是一个合法的用例,还是我滥用了 Scala 的 XML 库的当前实现?

最佳答案

如果您查看 sources原因揭晓。 Atom 是通用的,因为它将传递的对象转换为字符串。所以你可以通过一个 JButton到它,但它只会调用它的 toString 方法。 (第 48 行很重要)

我想可以从原子中取回数据:

val doc = <document>{ 42 }</document>

doc.child.head match {
case i: Atom[Int] => i.data / 7
case _ => error("Unsupported type")
}

返回 6 .所以你的计划会奏效。我仍然认为基于抽象类和案例类的树将是更好的选择,因为使用您的方法,所有类型安全都消失了,因为您可以传入所有内容,因此直到运行时才会发现类型错误。

关于scala - 为什么 scala.xml.Atom 类型参数化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5145387/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com