Erlang学习:通过参数实现状态保存

来源:互联网 发布:淘宝改差评收费 编辑:程序博客网 时间:2024/06/16 19:06

以下是来自learn you some erlang for great good一书中的例子,相当的经典,直接拿来用了。

-module(kitchen).-compile(export_all).start(FoodList) ->    spawn(?MODULE, fridge, [FoodList]).store(Pid, Food) ->    Pid ! {self(), {store, Food}},    receive        {Pid, Msg} -> Msg    after 3000 ->        timeout    end.take(Pid, Food) ->    Pid ! {self(), {take, Food}},    receive        {Pid, Msg} -> Msg    after 3000 ->        timeout    end.fridge(FoodList) ->    receive        {From, {store, Food}} ->            From ! {self(), ok},            fridge([Food|FoodList]);        {From, {take, Food}} ->            case lists:member(Food, FoodList) of                true ->                    From ! {self(), {ok, Food}},                    fridge(lists:delete(Food, FoodList));                false ->                    From ! {self(), not_found},                    fridge(FoodList)            end;        terminate ->            ok    end.

1> c(kitchen).
{ok,kitchen}
2> Pid = kitchen:start([rhubarbdoghotdog]).
<0.84.0>
3> kitchen:take(Pid, dog).
{ok,dog}
4> kitchen:take(Pid, dog).
not_found


0 0
原创粉丝点击