คำถามของมือใหม่สำหรับ Erlang dict

ฉันกำลังอ่าน การเขียนโปรแกรม Erlang โดย Joe Armstrong(Pragmatic Bookshelf) ในซอร์สโค้ด name_server.erl ในบทที่ 16 ตัวแปร Dict มาจากไหน การเรียก dict:new() สร้าง Dict โดยอัตโนมัติหรือไม่ และการอ้างอิงบอกว่า dict:new() สร้างพจนานุกรม ฉันไม่จำเป็นต้องเก็บมันเป็นตัวแปรเช่น 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 แหล่งที่มา


คำตอบ (1)


นี่เป็นส่วนหนึ่งของตัวอย่างไฟล์สองไฟล์ อีกไฟล์หนึ่ง (อยู่หน้าหนังสือทันที) คือ server.erl ประกอบด้วยฟังก์ชัน loop ที่เรียกใช้ฟังก์ชัน handle ใน name_server.erl (หรือโมดูลใดก็ตามที่คุณส่งไป):

บรรทัดคือ:

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

โดยที่ Mod เป็นโมดูลที่ส่งผ่านไปยัง start ก่อนหน้านี้ และ State ถูกเตรียมใช้งานก่อนหน้านี้เป็น Mod:init() ในฟังก์ชัน start

ดังนั้น State จึงถูกกำหนดค่าเริ่มต้นเป็น name_server:init() ซึ่งในไฟล์ของคุณส่งคืน dict:new() อย่างไรก็ตาม เนื่องจาก loop ถูกเรียกซ้ำ State จะใช้ค่าถัดไปคือ State1

ดังนั้นเมื่อมีการเรียก handle Dict จะถูกตั้งค่าเป็นค่าปัจจุบันที่ State

person Muhammad Alkarouri    schedule 16.09.2010