这是scala.xml.Elem中的错误吗?

这是scala.xml.Elem中的错误吗?,xml,scala,Xml,Scala,将集合[String]映射到集合[Elem]的属性可以很好地处理一个属性,但在共享其中一个属性时,处理多个属性似乎会失败: scala> val s1=Set("A","B","C") s1: scala.collection.immutable.Set[java.lang.String] = Set(A, B, C) scala> s1.map((a:String)=>{<X w={a}></X>}) res3: scala.collection.i

将集合[String]映射到集合[Elem]的属性可以很好地处理一个属性,但在共享其中一个属性时,处理多个属性似乎会失败:

scala> val s1=Set("A","B","C")
s1: scala.collection.immutable.Set[java.lang.String] = Set(A, B, C)

scala> s1.map((a:String)=>{<X w={a}></X>})
res3: scala.collection.immutable.Set[scala.xml.Elem] = Set(<X w="A"></X>, <X w="B"></X>, <X w="C"></X>)

scala> s1.map((a:String)=>{<X w={a} k="SSS"></X>})
res4: scala.collection.immutable.Set[scala.xml.Elem] = Set(<X k="SSS" w="A"></X>)
scala>val s1=Set(“A”、“B”、“C”)
s1:scala.collection.immutable.Set[java.lang.String]=Set(A、B、C)
scala>s1.map((a:String)=>{})
res3:scala.collection.immutable.Set[scala.xml.Elem]=Set(,)
scala>s1.map((a:String)=>{})
res4:scala.collection.immutable.Set[scala.xml.Elem]=Set()
B&C怎么了


还是我对元素上相等的理解是错误的?

这似乎是一个错误,尽管是一个非常奇怪的错误。我想这是
Set
中的一个bug,而不是
Elem
,但在这一点上我无法与任何权威人士交谈。

我认为问题在于
xml.MetaData
或其子类
xml.Attribute
。比较两个
元素时,会检查xml前缀、标签、属性和
节点的子节点是否相等

现在,
xml.MetaData
下面有一种奇怪的实现,它包含自己,同时还包含一个属性的链接列表。这意味着,例如:

scala >val elem = <e x="a" y="b"></e>
elem: scala.xml.Elem = <e y="b" x="a"></e>

scala> elem.attributes
res50: scala.xml.MetaData =  y="b" x="a"

scala> elem.attributes.toSet
res51: Set[scala.xml.MetaData] = Set( y="b" x="a",  x="a")
它工作正常,但在
属性
类中被重写。(我们在REPL中看不到它,但是我们的
元素属性
实际上是一个
属性
)在那里,代码只做这个

(this.pre == other.pre) && (this.key == other.key) && (this.value sameElements other.value)

如果属性列表在之前已转换为
集,但它不是,因此仅检查属性列表中的第一个元素是否相等,那么这将很好。因此,如果属性的内部链表中的head元素恰好是两个
xml.Elem
s的同一元素,那么它们将相等。

因此,它显然固定在trunk中……我想我可以先看看那里。哦,我应该在写所有这些东西之前搜索ticket db…。
(this.pre == other.pre) && (this.key == other.key) && (this.value sameElements other.value)