В чем разница между = и: = в Scala?
В чем разница между =
и :=
в Scala?
Я широко использовал google для "scala colon-equals", но не смог найти ничего определенного.
Ответы
Ответ 1
=
в scala является фактическим оператором присваивания - он выполняет несколько конкретных действий, которые по большей части не контролируются, например
- Предоставление
val
или var
значения при создании
- Изменение значения
var
- Изменение значения поля в классе
- Создание псевдонима типа
- Возможно, другие
:=
не является встроенным оператором - любой может перегрузить его и определить, чтобы он имел в виду все, что им нравится. Причина, по которой люди любят использовать :=
, состоит в том, что она выглядит очень привязанной и используется как оператор присваивания на других языках.
Итак, если вы пытаетесь выяснить, что означает :=
в конкретной библиотеке, которую вы используете... мой совет - просмотреть Scaladocs (если они существуют) для метода с именем :=
.
Ответ 2
от Мартина Одерского:
- Первоначально у нас было двоеточие = для присваивания - так же, как в Pascal, Modula и Ada, - и один знак равенства для равенства. Многие теоретики в области программирования утверждают, что это правильный способ сделать это. Назначение - это не равенство, и поэтому вы должны использовать другой символ для назначения. Но потом я попробовал это с некоторыми людьми, пришедшими с Java. Реакция, которую я получил, была: "Ну, это выглядит как интересный язык. Но почему вы пишете двоеточие =? Что это? И я объяснил, что это похоже на Паскаль. Они сказали:" Теперь я понимаю, но я не понимаю, почему вы настаиваете на этом ". Тогда я понял, что это не то, на что мы хотели настаивать. Мы не хотели говорить:" У нас есть лучший язык, потому что мы пишем двоеточие, вместо равных для назначения". Это совершенно незначительный момент, и люди могут привыкнуть к любому подходу. Поэтому мы решили не бороться с конвенцией в этих мелочах, когда были другие места, где мы действительно хотели изменить ситуацию.
from Цели Scala Дизайн
Ответ 3
=
выполняет присвоение. :=
не определен в стандартной библиотеке или спецификации языка. Это имя, которое бесплатно для других библиотек или вашего кода, если хотите.
Ответ 4
Scala допускает перегрузку оператора, где вы можете определить поведение оператора так же, как вы могли бы написать метод.
Как и в других языках, =
является оператором присваивания.
Не является стандартным оператором, который мне известен под названием :=
, но может определить его с этим именем. Если вы видите такой оператор, вы должны проверить документацию о том, что вы ищете, или найти, где этот оператор определен.
Существует много, которое вы можете сделать с операторами Scala. Вы можете сделать оператор практически из любых символов, которые вам нравятся.