Интересно, почему Set[A]
преобразуется в Vector[A]
, если я запрашиваю подкласс Seq[A]
? Чтобы проиллюстрировать это, возьмем следующий пример:
val A = Set("one", "two")
val B = Set("one", "two", "three")
def f(one: Seq[String], other : Seq[String]) = {
one.intersect(other) match {
case head :: tail => head
case _ => "unknown"
}
}
f(A.to, B.to)
Эта функция вернет «неизвестно» вместо единицы. Причина в том, что A.to
будет приведено к Vector[String]
. Оператор cons (::
) не определен для Векторов, но для Списков, поэтому применяется второй случай и возвращается «неизвестно». Чтобы решить эту проблему, я мог бы использовать оператор +:
, который определен для всех Seqs
, или преобразовать Set в список (A.to[List]
). Итак, мой (academi c) вопрос:
Почему A.to
возвращает Вектор. По крайней мере, в соответствии с scala документами реализация по умолчанию Seq
равна LinearSeq
, а по умолчанию это List
. Что я не так понял?