2015-09-21 2 views
2

В чем разница между someCollection.to[Seq] и someCollection.toSeq? Одна вещь, которую я заметил, это то, что когда вызывается Map, .toSeq обычно возвращает Vector, а .to[Seq] обычно возвращает ArrayBuffer, но я не уверен, что это на самом деле означает.Scala: .to [Seq] vs .toSeq на коллекциях

ответ

6

Метод коллекции Scala - это более общая функция. В качестве неявного параметра требуется значение типа CanBuildFrom[From, Elem, To], которое определяет, как можно построить коллекцию To с элементами типа Elem от From. Обычно, toSeq, toList, toMap, ... прямо вперед к этому методу, как это имеет место, например, для Set.

Однако некоторые классы предлагают специальную реализацию для определенных методов toXXX, чтобы быть более эффективными. Это относится к реализации toSeq класса Map, который внутренне вызывает toBuffer. toBuffer возвращает ArrayBuffer. В отличие от этого, более общий метод to[Seq] будет вызываться с неявным значением CanBuildFrom, которое возвращает коллекцию Vector, которая является неизменной.

+0

Могу ли я предположить, что если особых причин нет, я должен наклоняться к методам 'toXXX' вместо' to [XXX] '? –

+0

Примеры, где это имеет значение. http://stackoverflow.com/a/28163729/1296806 или '(от 1 до 10) .to [Установить] (3)' –

Смежные вопросы