Подтвердить что ты не робот

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

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

Я широко использовал google для "scala colon-equals", но не смог найти ничего определенного.

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

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

from Цели Scala Дизайн

Ответ 3

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

Ответ 4

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

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

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

Существует много, которое вы можете сделать с операторами Scala. Вы можете сделать оператор практически из любых символов, которые вам нравятся.