2010-09-16 3 views
3

Je suis en train de lire Programmation Erlang par Joe Armstrong (Pragmatic Bookshelf). Dans le code source name_server.erl sur le chapitre 16, Où est Dict variable de? Appeler dict: new() génère automatiquement Dict? Et, référence indique que dict: new() crée un dictionnaire. N'ai-je pas besoin de le stocker comme une variable comme Dict = dict: new()?Question de débutant pour Erlang dict

-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}. 

Répondre

4

Cela fait partie d'un exemple de deux fichiers. L'autre fichier (immédiatement avant dans le livre) est server.erl. Il contient une fonction loop qui appelle la fonction handle dans name_server.erl (ou quel que soit le module que vous passez à lui):

La ligne est:

{Response, State1} = Mod:handle(Request, State), 

Mod est le module passé à start plus tôt. Et State est initialisé précédemment comme Mod:init() dans la fonction de démarrage.

Donc State est initialisé à name_server:init() qui dans votre fichier renvoie dict:new(). Cependant, comme loop est appelée récursivement State prendra la valeur suivante de State1. Lorsque handle est appelée, Dict est définie sur la valeur actuelle State.