Если я вызываю toSeq в неизменяемой коллекции Set, я получаю ArrayBuffer.
scala> Set(1,2,3).toSeq // returns Seq[Int] = ArrayBuffer(1, 2, 3)
Это меня удивляет. Учитывая Scala акцент на использовании неизменяемых структур данных, я ожидаю вернуть неизменяемую последовательность, такую как Vector или List вместо изменчивого ArrayBuffer. Возвращаемое упорядочение элементов набора должно быть, конечно, undefined, но, похоже, не существует какой-либо семантической причины, почему это упорядочение также должно быть изменчивым.
В общем, я ожидаю, что операции Scala всегда будут давать неизменные результаты, если я явно не запрошу mutable. Это было мое предположение, но оно неверно здесь, и я просто потратил час на отладку проблемы, когда неожиданное присутствие ArrayBuffer привело к ошибке выполнения в инструкции match. Мое исправление заключалось в том, чтобы изменить Set(...).toSeq на Set(...).toList, но это похоже на взломать, потому что ничего не нужно в моем приложении, которое требует, в частности, списка в этой точке.
Имеет ли Set(...).toSeq возвращаемый изменчивый объект дефект в реализации Scala или существует принцип, который я неправильно понимаю здесь?
Это Scala 2.9.2.