2010-09-16 49 views
3

提問:我是喬·阿姆斯特朗(務實書架)閱讀編程二郎。在第16章的name_server.erl源代碼中,Dict變量來自哪裏?調用字典:new()會自動生成字典?並且,引用說dict:new()創建字典。我不需要將它存儲爲像Dict = dict:new()新手對Erlang的字典

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

回答

4

這是兩個文件示例的一部分。其他文件(緊接在書中)是server.erl。它包含一個loop函數調用中name_server.erlhandle函數(或任何你傳遞給它模塊):

該生產線是:

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

其中Mod是傳遞給start早些時候模塊。並且State在起始函數中被初始化爲Mod:init()

因此State初始化爲name_server:init()它在您的文件中返回dict:new()。然而,如loop遞歸調用State將採取下一個值State1

因此,當調用handle時,Dict被設置爲當前值State