Az Agent modul absztrakciót nyújt folyamatok és a receive-send ciklus létrehozásához. A továbbiakban az Agent modullal indított folyamatokat agentfolyamatoknak fogjuk nevezni. Egy agentfolyamat lehet az a választás, amely egy központilag megosztott állapotot képvisel.
Egy agentfolyamat indításához az Agent a start/2 függvényt kínálja. Az agentfolyamat start-tal való indításakor a megadott függvény adja vissza a folyamat kezdeti állapotát:
# Start an agent process with an initial value of an empty list
{:ok, agent_pid} = Agent.start(fn -> [] end)
Ahogy a Map vagy a List, úgy az Agent is számos függvényt kínál az agentfolyamatokkal való munkához.
Az Agent-tel kapcsolatos összes funkcionalitást célszerű egy modulba szervezni és egységbe zárni a modellezett terület számára.
A közösségi egyesületed arra kért meg, hogy készíts egy egyszerű nyilvántartó alkalmazást a közösségi kert regisztrációinak kezeléséhez. A Plot structot már megkaptad.
Valósítsd meg a CommunityGarden.start/1 függvényt. Ez egy opcionális kulcsszólistát fogad, amelyet továbbad az agentfolyamatnak. A kert kezdőállapotát üres parcellagyűjteményként kell inicializálni. Egy :ok tuple-t adjon vissza a kert pid-jével.
{:ok, pid} = CommunityGarden.start()
# => {:ok, #PID<0.112.0>}
Valósítsd meg a CommunityGarden.list_registrations/1 függvényt. Ez a közösségi kert pid-jét kapja meg. A tárolt, regisztrált parcellák listáját adja vissza.
CommunityGarden.list_registrations(pid)
# => []
Ezen a ponton még nem adtuk hozzá a parcella regisztrálásának lehetőségét, így ennek a listának üresnek kell lennie
Valósítsd meg a CommunityGarden.register/2 függvényt. Ez a közösségi kert pid-jét és egy nevet kap, amihez a parcellát regisztrálja. Sikeres futás esetén a Plot structot adja vissza a parcella azonosítójával és a hozzá regisztrált személlyel.
Az azonosítók növekvőek és egyediek legyenek. Az azonosítók számlálóját az agentfolyamat állapotában tarthatod.
CommunityGarden.register(pid, "Emma Balan")
# => %Plot{plot_id: 1, registered_to: "Emma Balan"}
CommunityGarden.list_registrations(pid)
# => [%Plot{plot_id: 1, registered_to: "Emma Balan"}]
Valósítsd meg a CommunityGarden.release/2 függvényt. Ez a felszabadítandó parcella pid-jét és id-jét kapja meg. Siker esetén :ok-ot ad vissza. Amikor egy parcellát felszabadítasz, az azonosító nem kerül újra felhasználásra; csak egyedi azonosítóként szolgál.
CommunityGarden.release(pid, 1)
# => :ok
CommunityGarden.list_registrations(pid)
# => []
Valósítsd meg a CommunityGarden.get_registration/2 függvényt. Ez a vizsgálandó parcella pid-jét és id-jét kapja meg. Ha a parcella regisztrált, adja vissza a parcellát; ha nincs regisztrálva, :not_found-ot ad vissza.
CommunityGarden.get_registration(pid, 1)
# => %Plot{plot_id: 1, registered_to: "Emma Balan"}
CommunityGarden.get_registration(pid, 7)
# => {:not_found, "plot is unregistered"}
Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) Elixir nyelvet 58 fogalom168 feladat segítségével, valódi emberi mentorálással, mindez ingyen.