Верно ли возвращать IndexesSeq вместо Array, если в Scala необходим неизменный массив? - PullRequest
4 голосов
/ 07 февраля 2012

Моя функция создает массив - упорядоченный, непрерывно пронумерованный набор записей.Но, насколько мне известно, Scala Array - это изменчивая коллекция, а функциональный подход предполагает, что было бы более целесообразно возвращать неизменную коллекцию в общем случае.Поэтому я просто звоню Array.toIndexedSeq, чтобы вернуть IndexedSeq вместо Array.Можно ли считать это правильным решением?Разве это не вводит какое-либо неочевидное поведение, которое может повлиять на функцию и использование результата и, вероятно, будет считаться нежелательным?Есть ли лучшие способы решения этой проблемы?

Ответы [ 2 ]

4 голосов
/ 07 февраля 2012

Единственная, возможно, неочевидная вещь, о которой я могу подумать, это то, что array.toIndexedSeq не создает простой обертки над самим массивом, как это делают методы Collections.unmodifiable* в Java, но копирует элементы в новую коллекцию.(В противном случае более поздние изменения в массиве могут привести к внезапному изменению «неизменяемой» последовательности.)

4 голосов
/ 07 февраля 2012

Может ли это считаться правильным делом?

Да.

Разве это не приводит к неочевидному поведению, которое может повлиять на функцию ииспользование результата и, вероятно, будет считаться нежелательным?

Нет, не то, что я знаю.

Есть ли лучшие способы решения этой проблемы?

Если возможно, попробуйте полностью исключить использование массива, если, конечно, производительность не имеет первостепенного значения.

...