Являются ли переменные в Erlang ссылочными переменными (или их можно назвать)? - PullRequest
1 голос
/ 14 января 2012

так например

f() -> 3.
x() -> F = fun() -> f() end,
       A = f(),
       B = ?MODULE:f(),
       C = F().

сразу после определения F хеша, новая версия кода для f() определяется следующим образом f()-> three и загружен. Каково будет значение C.

Ответы [ 2 ]

0 голосов
/ 16 января 2012

если вы не можете прочитать весь ответ Обновление контекст: Ответ "три"

РЕДАКТИРОВАТЬ: Извините Ответ вводит в заблуждение, вот правильный ответ:Так как F только что определен, но функция не оценивается, так как мы выполняем полный вызов до оценки F;новый код будет загружен, и значение будет «три»

Итак, я разместил вопрос в списке рассылки erlang, получил ответ с этим ответом

Приколы всегдапривязаны к коду, из которого они изначально загружены.Только поиск по имени зависит от загрузки кода AFAICT.Это было источником исключений в нашей предыдущей разработке, потому что при первой загрузке нового кода F все еще действует, но при второй загрузке нового кода старый код очищается и F теперь недействителен.Любой вызов этого вызовет исключение.Вместо этого мы завернули наши потребности в лямбда-выражения в модуль с состоянием.Не самый элегантный, но позволяет получать «динамические лямбды».Если все, что вам нужно для развлечения, это module: function, вы можете использовать для этого кортеж вместо веселья.С уважением, JW

0 голосов
/ 16 января 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...