[Erlang] - spawn функции с параметром
От: DemAS http://demas.me
Дата: 15.02.09 12:43
Оценка:
Как в функции 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
Re: [Erlang] - spawn функции с параметром
От: Mr.Cat  
Дата: 15.02.09 14:38
Оценка:
Здравствуйте, 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).
Re: [Erlang] - spawn функции с параметром
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 15.02.09 20:22
Оценка:
Здравствуйте, 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()).

Это ещё лучше, потому что стартовая функция процесса получила явное имя и будет видна при необходимости.
The God is real, unless declared integer.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.