Erlang - нерестовые процессы и передача аргументов - PullRequest
11 голосов
/ 21 февраля 2009

Я продолжаю сталкиваться с этим. Я хочу порождать процессы и передавать аргументы им без использования формы MFA (модуль / функция / аргументы), так в основном без необходимости экспортировать функцию, с которой я хочу порождать аргументы. Я обходил это несколько раз, используя замыкания (приколы) и имея аргументы просто быть связанными значениями вне забавы (на которую я тогда ссылаюсь внутри забавы), но это ограничение моей структуры кода ... Я смотрел только на документы и спавн имеет обычную форму spawn / 1 и spawn / 3, больше ничего ...

Я понимаю, что перезагрузка кода в порожденных процессах невозможна без использования формы MFA, но порожденные процессы не имеют долгосрочного характера и завершаются относительно быстро, поэтому это не проблема (я также хочу содержать весь код в одной функции уровня модуля с подзадачами, помещенными в функции внутри этой функции).

высоко ценится спасибо

Ответы [ 2 ]

12 голосов
/ 21 февраля 2009

На самом деле Ричард указал мне правильное направление, чтобы избежать проблемы (в ответ на тот же пост, который я разместил в Erlang GoogleGroups): http://groups.google.com/group/erlang-programming/browse_thread/thread/1d77a697ec67935a

Его ответ:

Под "использованием замыканий" я надеюсь, что вы имеете в виду что-то вроде этого:

Pid = spawn (fun () -> any_function (Any, Number, Of, Arguments) end)

Как бы это ограничивало вашу структуру кода?

 /Richard 

спасибо, что быстро прокомментировали мой вопрос. Высоко ценится

1 голос
/ 21 февраля 2009

Краткий ответ: вы не можете. Spawn (во всех его различных формах) принимает только функцию 0-арности. Использование замыкания и добавление связанных переменных из функции порождения - это лучший способ, если не считать использование какого-либо общего хранилища данных, например ETS (Monster Overkill).

Я никогда не видел, чтобы использование замыкания сильно мешало моей структуре кода; Можете ли вы привести пример проблем, с которыми вы столкнулись, и, возможно, кто-то может привести их в порядок?

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