Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Elixir 单个模块中有多个代理_Elixir - Fatal编程技术网

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
在这里,我们使用深度地图挖掘。这是一种更可取的方式,因为在编写健壮的应用程序时,您应该注意数据的一致性,而不是崩溃,而且只注意一个
代理
,而不是保持多个代理的一致性