使用代理管理一个状态

包装和访问一个状态的最简单方法是 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}