Мои знания по 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) <
^
Это говорит мне, что <
происходит от черты 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
Я думаю, что правильный ответ найден в собственном признаке Ordered
: для <
между наборами нет реализации, кроме сравнения их hashCode:
Важно, чтобы метод hashCode для экземпляра Ordered [A] был совместим с методом сравнения. Однако невозможно обеспечить разумную реализацию по умолчанию. Поэтому, если вам необходимо вычислить хэш экземпляра Ordered [A], вы должны предоставить его самостоятельно либо при наследовании, либо при создании экземпляра.