Pertanyaan pemula untuk dikte Erlang

Saya sedang membaca Pemrograman Erlang oleh Joe Armstrong(Rak Buku Pragmatis). Dalam kode sumber name_server.erl pada Bab 16, Dari mana variabel Dict berasal? Memanggil dict:new() menghasilkan Dict secara otomatis? Dan, referensi mengatakan bahwa dict:new() membuat kamus. Apakah saya tidak perlu menyimpannya sebagai variabel seperti 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}.

person Hongseok Yoon    schedule 16.09.2010    source sumber


Jawaban (1)


Ini adalah bagian dari contoh dua file. File lainnya (tepat sebelum di buku) adalah server.erl. Ini berisi fungsi loop yang memanggil fungsi handle di name_server.erl (atau modul apa pun yang Anda berikan padanya):

Garisnya adalah:

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

dimana Mod adalah modul yang diteruskan ke start sebelumnya. Dan State diinisialisasi sebelumnya sebagai Mod:init() di fungsi awal.

Jadi State diinisialisasi ke name_server:init() yang dalam file Anda mengembalikan dict:new(). Namun, saat loop dipanggil secara rekursif, State akan mengambil nilai berikutnya sebesar State1.

Jadi ketika handle dipanggil, Dict disetel ke nilai saat ini State.

person Muhammad Alkarouri    schedule 16.09.2010