我对 Scala 的了解并不广泛,但做了一些测试,我得到以下信息:
scala> Set(1,2) <
<console>:5: error: missing arguments for method < in trait Ordered;
follow this method with `_' if you want to treat it as a partially applied function
Set(1,2) <
^
这告诉我<
来自 trait Ordered
。更多提示:
scala> Set(1,2) < _
res4: (Iterable[Int]) => Boolean = <function>
也就是说,Set
被评估为Iterable
,因为可能存在从 Iterable[A] 到 Ordered[Iterable[A]] 的一些隐式转换,但我不再确定......测试不一致。例如,这两个可能暗示了一种字典比较:
scala> Set(1,2,3) < Set(1,2,4)
res5: Boolean = true
1等于,2等于,3小于4。
scala> Set(1,2,4) < Set(1,2,3)
res6: Boolean = false
但这些没有:
scala> Set(2,1) < Set(2,4)
res11: Boolean = true
scala> Set(2,1) < Set(2,2)
res12: Boolean = false
我认为正确的答案是在 trait 中找到的:除了比较它们的 hashCode 之外,集合之间Ordered
没有实现:<
重要的是,Ordered[A] 实例的 hashCode 方法与 compare 方法一致。但是,不可能提供合理的默认实现。因此,如果您需要能够计算 Ordered[A] 实例的哈希值,您必须在继承或实例化时自己提供它。