Elixir 单个模块中有多个代理
一个模块中可以有多个代理吗?例如,我正在创建一个游戏,我需要一个游戏状态的包装器以及一个用户状态的包装器。例如:Elixir 单个模块中有多个代理,elixir,Elixir,一个模块中可以有多个代理吗?例如,我正在创建一个游戏,我需要一个游戏状态的包装器以及一个用户状态的包装器。例如: defmodule TicTacToe do def start_game do Agent.start_link(..., name: Moves) Agent.start_link(..., name: Users) end end 文档中的示例显示了一个代理。start\u link,这让我觉得不应该有多个代理 尽管拥有您想要的任意多的代理是绝对合
defmodule TicTacToe do
def start_game do
Agent.start_link(..., name: Moves)
Agent.start_link(..., name: Users)
end
end
文档中的示例显示了一个
代理。start\u link
,这让我觉得不应该有多个代理 尽管拥有您想要的任意多的代理是绝对合法的(它们仍然是erlang的gen_服务器),但在这种特殊情况下不需要两个代理
经验法则是“不要产生多余的服务器”
一张带有键:moves
和:users
的地图在这里就足够了:
@doc """
Starts a new single agent for both moves and users.
"""
def start_link do
Agent.start_link(fn -> %{moves: %{}, users: %{}} end)
end
@doc """
Gets a move by `key`.
"""
def get_move(key) do
Agent.get(&get_in(&1, [:moves, key]))
end
在这里,我们使用深度地图挖掘。这是一种更可取的方法,因为在编写健壮的应用程序时,您应该注意数据的一致性,而不是崩溃,而且只注意一个代理,而不是保持其中许多代理的一致性更容易。,尽管拥有如此多的代理
s如您所愿(它们仍然是erlang的gen_服务器
s),在这种特殊情况下,不需要两个代理
经验法则是“不要产生多余的服务器”
一张带有键:moves
和:users
的地图在这里就足够了:
@doc """
Starts a new single agent for both moves and users.
"""
def start_link do
Agent.start_link(fn -> %{moves: %{}, users: %{}} end)
end
@doc """
Gets a move by `key`.
"""
def get_move(key) do
Agent.get(&get_in(&1, [:moves, key]))
end
在这里,我们使用深度地图挖掘。这是一种更可取的方式,因为在编写健壮的应用程序时,您应该注意数据的一致性,而不是崩溃,而且只注意一个代理
,而不是保持多个代理的一致性