使用代理管理一個狀態

包裝和訪問一個狀態的最簡單方法是 Agent。該模組允許一個人生成一個保持任意資料結構的程序,並允許一個人傳送訊息來讀取和更新該結構。由於這個過程,對結構的訪問是自動序列化的,因為程序一次只處理一條訊息。

iex(1)> {:ok, pid} = Agent.start_link(fn -> :initial_value end)
{:ok, #PID<0.62.0>}
iex(2)> Agent.get(pid, &(&1))
:initial_value
iex(3)> Agent.update(pid, fn(value) -> {value, :more_data} end)
:ok
iex(4)> Agent.get(pid, &(&1))
{:initial_value, :more_data}