我的斯卡拉的知識並不豐富,但做了一些測試,我得到以下幾點:
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) <
^
這告訴我,<
來自Ordered
的特質。更多提示:
scala> Set(1,2) < _
res4: (Iterable[Int]) => Boolean = <function>
也就是說,Set
被評估爲Iterable
,因爲也許有來自可迭代[A]到有序[可迭代[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
我認爲正確的答案是在Ordered
特徵中找到的正確答案:<
之間沒有實現集之間的比較他們的hashCode:
Ordered [A]的實例的hashCode方法與compare方法一致非常重要。但是,不可能提供合理的默認實現。因此,如果您需要能夠計算Ordered [A]的實例的散列值,則必須在inheiriting或instantiating時自己提供它。
+1。我只是好奇......在斯卡拉2.8這是不允許的,因爲集合的迭代次序是不確定的? – 2010-07-01 23:32:57
@Diego我認爲它被拋棄了,因爲收集的順序被認爲是特定於應用程序的。 – 2010-07-02 05:54:53