Поскольку все термины в Elixir неизменяемы, для пользователя нет никакой разницы, передается ли аргумент «по значению» или «по ссылке». Вы никогда не сможете изменить значение термина в функции и отразиться в переменной, которую вызывающий абонент отправил функции. Карты можно рассматривать как «по ссылке», так как только указатель на них отправляется в функцию виртуальной машиной, что очень эффективно.
Следует отметить, что термины, переданные другим процессам , являются, глубоко скопированные виртуальной машиной. Единственное исключение - «большие» строки, обычно> 64 байта, которые передаются как ссылка на глобальную кучу двоичных файлов и используют подсчет ссылок для сбора мусора.
Я подозреваю, что это значение имеет принцип Эликсира без побочного эффекта.
Эликсир не является чистым, он имеет побочные эффекты. Например, вы можете добавить I/O к любой функции. Вы, вероятно, не имели никаких изменчивых значений.
Я предлагаю заменить «термины, переданные другим процессам», как «термины, отправленные как сообщения» –
@FredtheMagicWonderDog Я думал об этом, но не является техническим термином, а не «сообщением», но будет глубоко скопировать карту? 'map =% {...}; spawn (fn -> IO.inspect (map) end) '? – Dogbert
Хороший вопрос. Мне нужно подумать об этом. –