Как в функции start_db_server передать в функцию loop_db_server параметр
dict:new() ?
start_db_server()->
spawn(fun load_db_server/1).
loop_db_server(GlobalDict)->
receive
{From, {dict, Dict}} ->
% .....
loop_db_server(GlobalDict);
% .....
end.
[code]
Сейчас вышел из ситуации путем введения еще одной функции, но ищу более
красивого решения:
[code]
start_db_server()->
spawn(fun prepare_db_server/0).
prepare_db_server()->
loop_db_server(dict:new()).
loop_db_server(GlobalDict)->
receive
{From, {dict, Dict}} ->
% .....
loop_db_server(GlobalDict);
% ....
end.
Posted via RSDN NNTP Server 2.1 beta
Здравствуйте, DemAS, Вы писали:
DAS>Как в функции start_db_server передать в функцию loop_db_server параметр
DAS>dict:new() ?
Насколько я помню, spawn/3 и spawn/4 (которые принимают не fun, а имя модуля и имя функции) умеют передавать список аргументов.
Ну или вот как-то так:
start_db_server()->
spawn(fun()-> load_db_server(dict:new()) end).
Здравствуйте, DemAS, Вы писали:
DAS>Как в функции start_db_server передать в функцию loop_db_server параметр
DAS>dict:new() ?
DAS>DAS>start_db_server()->
DAS> spawn(fun load_db_server/1).
DAS>loop_db_server(GlobalDict)->
DAS> receive
DAS> {From, {dict, Dict}} ->
DAS> % .....
DAS> loop_db_server(GlobalDict);
DAS> % .....
DAS>end.
DAS>[code]
DAS>Сейчас вышел из ситуации путем введения еще одной функции, но ищу более
DAS>красивого решения:
"Красивого" решения тут не будет, промежуточная функция нужна по-любому, потому что именно её нужно запустить в начале нового процесса. В OTP почему-то не боятся так делать (причём в несколько этапов), а Вы боитесь.
Можно так:
[code]
start_db_server() ->
spawn(fun() -> load_db_server(dict:new())).
DAS>[code]
DAS>start_db_server()->
DAS> spawn(fun prepare_db_server/0).
DAS>prepare_db_server()->
DAS> loop_db_server(dict:new()).
Это ещё лучше, потому что стартовая функция процесса получила явное имя и будет видна при необходимости.