Почему в коллекциях scala нет методов, понятных человеку, таких как .append, .push и т. Д. - PullRequest
5 голосов
/ 24 августа 2011

В коллекциях Scala есть множество читаемых и почти читаемых операторов, таких как :+ и +:, но почему нет никаких читаемых человеком синонимов, таких как append?

Ответы [ 5 ]

9 голосов
/ 24 августа 2011

Все изменяемые коллекции в Scala имеют черту BufferLike и определяют метод append .

Неизменные коллекции не имеют признака BufferLike и, следовательно, определяют только другие методы, которые не изменяют коллекцию на месте, а генерируют новую.

4 голосов
/ 24 августа 2011

Имена символических методов допускают комбинацию с операцией присваивания =.

Например, если у вас есть метод ++, который создает новую коллекцию, вы можете автоматически использовать ++=, чтобы назначить новую коллекцию некоторой переменной:

var array = Array(1,2,3)
array ++= Array(4,5,6)
// array is now Array(1,2,3,4,5,6)

Это невозможно без символических имен методов.

3 голосов
/ 24 августа 2011

На самом деле они часто являются некоторыми понятными человеку синонимами:

  • foldLeft эквивалентно /:
  • foldRight эквивалентно :\

Остальные операторы сложения, которые вполне понятны человеку, так как:

  • ++ эквивалентен java addAll
  • :+ isappend
  • +: prepend

Позиция точки с запятой указывает на экземпляр получателя.

Наконец, некоторые странные операторы являются наследием других функциональных программязыки.Например, создание списка (SML) или обмен сообщениями об актере (erlang).

2 голосов
/ 25 августа 2011

Отличается ли он от любого другого языка?

Давайте рассмотрим Java.Что такое читаемая человеком версия +, -, * и / для int?Или, давайте возьмем String: что такое читаемая человеком версия +?Обратите внимание, что concat - это не то же самое - он не принимает не String параметры.

Возможно, вас это беспокоит, потому что в Java - в отличие, скажем, от C ++ - либо вещииспользовать исключительно не алфавитные операторы или буквенные операторы - за исключением String '+.

0 голосов
/ 25 августа 2011

Стандартная библиотека Scala не предназначена для Java. Вместо этого предусмотрены адаптеры для преобразования между коллекциями Java и Scala.

Попытка предоставить дружественный к Java API не только ограничит выбор идентификаторов (или мандат на предоставление псевдонимов), но также ограничит использование обобщенных типов и типов функций. Для подтверждения проекта потребуется значительно больше испытаний.

По той же теме, я помню некоторые дебаты относительно того, должны ли коллекции 2.8 реализовать java.util.Iterable.

http://scala -programming-language.1934581.n4.nabble.com / Как к установленной-в масштабе-за-BigDecimal-Скала-s-метод-td1948885.html

http://www.scala -lang.org / узел / 2177

...