В чем разница между = и: = в Scala? - PullRequest
46 голосов
/ 13 октября 2011

В чем разница между = и := в Scala?

Я много гуглил по "scala двоеточию", но не смог найти ничего определенного.

Ответы [ 4 ]

79 голосов
/ 13 октября 2011

= в scala является действительным оператором присваивания - он выполняет несколько конкретных действий, которые по большей части вы не можете контролировать, например

  • Предоставление val или var значения при его создании
  • Изменение значения var
  • Изменение значения поля в классе
  • Создание псевдонима типа
  • Возможно, другие

:= не является встроенным оператором - любой может его перегрузить и определить, что он означает что угодно. Причина, по которой людям нравится использовать :=, заключается в том, что он выглядит очень присваиваемым и используется в качестве оператора присваивания на других языках.

Итак, если вы пытаетесь выяснить, что означает := в конкретной библиотеке, которую вы используете ... мой совет - найдите в скаладоке (если они существуют) метод с именем :=.

53 голосов
/ 13 октября 2011

от Мартина Одерского:

  • Изначально у нас было двоеточия равно для назначения - как в Паскале, Модуле и Аде - и один знак равенства для равенства. Многие теоретики программирования утверждают, что это правильный способ сделать это. Назначение не является равенством, и поэтому вы должны использовать другой символ для назначения. Но потом я попробовал это с некоторыми людьми, пришедшими с Java. Реакция, которую я получил, была: «Ну, это выглядит как интересный язык. Но почему вы пишете двоеточие равно ? Что это?» И я объяснил, что это так на Паскале. Они сказали: «Теперь я понимаю, но я не понимаю, почему вы настаиваете на этом». Тогда я понял, что это не то, на чем мы хотели настаивать. Мы не хотели говорить: «У нас есть лучший язык, потому что мы пишем« равно »для двоеточия». Это совершенно незначительный момент, и люди могут привыкнуть к любому подходу. Поэтому мы решили не бороться с условностями в этих незначительных вещах, когда были другие места, где мы хотели что-то изменить .

из Цели замысла Скалы

5 голосов
/ 13 октября 2011

Scala допускает перегрузку операторов, где вы можете определить поведение оператора так же, как вы можете написать метод.

Как и в других языках, = является оператором присваивания.

Это не стандартный оператор, о котором я знаю, который называется :=, но он может определить оператор с таким именем.Если вы видите такой оператор, вам следует проверить документацию на то, на что вы смотрите, или найти, где этот оператор определен.

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

5 голосов
/ 13 октября 2011

= выполняет назначение.:= не определено в стандартной библиотеке или спецификации языка.Это имя, которое могут свободно использовать другие библиотеки или ваш код, если хотите.

...