[erlang-questions] need some help with erlang

wde wde@REDACTED
Tue Feb 16 19:42:14 CET 2010


a simple example :

-module(db_server).

-export([start/0, init/1, write/2, read/1]).

start() ->
    register(server, spawn(db_server, init, [dict:new()])).

init(Records) ->
    receive
        {From,{add, Key, Value}} ->
            NewRecords = dict:store(Key, Value, Records),
            From ! {self(),{ok, Key, Value}},
	   init(NewRecords);
        {From,{show, Key} }->
            Resp =
			case dict:find(Key, Records) of
		                {ok, Value} -> Value;
		                error -> {error, no_such_value}
		         end,
	   From ! {self(),Resp},
	   init(Records);
        {From,{delete, Key}} ->
            NewRecords = dict:erase(Key, Records),
            From ! {self(),ok},
	   init(NewRecords)
    end.


write(Key, Value) ->
	server ! {self(),{add, Key, Value}},
	receive
		{_From,Msg} -> Msg
	after 2000 ->
		ok
	end.

read(Key) ->
    server ! {self(),{show, Key}},
	receive
		{_From,Msg} -> Msg
	after 2000 ->
		ok
	end.



>I wrote this small db emulator to store the data in a hash.
>I used "write" function to write data to the hash. But when I try to add
>some data with key, value, It didn't work.
>I suppose I made some mistake in the code, but I can't figure out the
>problem :)
>
>-module(db_server).
>
>-export([start/0, init/1, write/2, read/1]).
>
>start() ->
>    register(server, spawn(db_server, init, [dict:new()])).
>
>init(Records) ->
>    receive
>        {add, Key, Value} ->
>            dict:store(Key, Value, Records),
>            {ok, Key, Value};
>        {show, Key} ->
>            case dict:find(Key, Records) of
>                {ok, Value} -> Value;
>                error -> {error, no_such_value}
>            end;
>        {delete, Key} ->
>            dict:erase(Key, Records),
>            ok
>    end,
>    init(Records).
>
>write(Key, Value) ->
>    server ! {add, Key, Value}.
>
>read(Key) ->
>    server ! {show, Key}.
>




More information about the erlang-questions mailing list