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

Erlang - нерестилища и прохождение аргументов

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

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

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

4b9b3361

Ответ 1

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

Его ответ:

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

Pid = spawn (fun() → any_function (Any, Number, Of, Arguments))

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

 /Richard 

благодарим вас за быстрый комментирование вашего вопроса. Очень ценится

Ответ 2

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

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