私の 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>
つまり、 Iterable[A] から Ordered[Iterable[A]] への暗黙的な変換があるため、Set
は に評価されますがIterable
、もうわかりません... テストは一貫していません。たとえば、次の 2 つは一種の辞書式比較を示唆している可能性があります。
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 メソッドが比較メソッドと一致していることが重要です。ただし、賢明なデフォルトの実装を提供することはできません。したがって、Ordered[A] のインスタンスのハッシュを計算できるようにする必要がある場合は、継承時またはインスタンス化時に自分で提供する必要があります。