我正在研究以下教程
https://howistart.org/posts/elixir/1
我正在与代理商合作,我不明白这条线是如何工作的.
def pop(door) do Agent.get_and_update(door, fn [] -> {:error, []} [h|t] -> {{:ok, h}, t} ## returns {:ok, h} why not {{:ok, h}, t} end ) end
产量
iex(5)> Portal.Door.push(:pink, 2) :ok iex(6)> Portal.Door.push(:pink, 3) :ok iex(7)> Portal.Door.push(:pink, 4) :ok iex(8)> Portal.Door.pop(:pink) {:ok, 4}
具有不同结果的简单函数
person = fn ( first, last ) -> {{:ok, first}, last} end
输出:
iex(13)> person.("John", "Doe") {{:ok, "John"}, "Doe"}
为什么一个返回内部元组和外部元组,代理只返回内部元组.
提前致谢!
从这里的Agent.get_and_update(agent, fun, timeout)
文档:
在一个操作中获取并更新代理状态.
函数fun被发送到代理,代理调用传递代理状态的函数.该函数必须返回一个包含两个元素的元组,第一个是要返回的值(即获取值),第二个是新状态.
这是因为Agent
只是一个GenServer
必须返回响应和新状态的特殊情况.你可以查看这里的实现Agent.Server