I’m reading Programming Erlang by Joe Armstrong(Pragmatic Bookshelf). In name_server.erl source code on Chapter 16, Where’s Dict variable from? Calling dict:new() generates Dict automatically? And, reference says that dict:new() creates dictionary. Don’t I need to store it as a variable like Dict = dict:new()?
-module(name_server).
-export([init/0, add/2, whereis/1, handle/2]).
-import(server1, [rpc/2]).
add(Name, Place) ->
rpc(name_server, {add, Name, Place}).
whereis(Name) ->
rpc(name_server, {whereis, Name}).
init() ->
dict:new().
handle({add, Name, Place}, Dict) ->
{ok, dict:store(Name, Place, Dict)};
handle({whereis, Name}, Dict) ->
{dict:find(Name, Dict), Dict}.
This is part of a two file example. The other file (immediately before it in the book) is
server.erl. It contains aloopfunction that calls thehandlefunction inname_server.erl(or whatever module you pass to it):The line is:
where
Modis the module passed tostartearlier. AndStateis initialised earlier asMod:init()in the start function.So
Stateis initialised toname_server:init()which in your file returnsdict:new(). However, asloopis called recursivelyStatewill take the next value ofState1.So when
handleis called,Dictis set to the current value ofState.