我有Supervisor及其子Genserver,其代码如下:
defmodule MyApp.StatisticSupervisor do
use DynamicSupervisor
def start_link(_) do
DynamicSupervisor.start_link(__MODULE__,[],name: {:global,__MODULE__})
end
def start_statistic(team_id) do
DynamicSupervisor.start_child(global_name(),{MyApp.Statistic.Server,[team_id]})
end
def init(_) do
DynamicSupervisor.init(strategy: :one_for_one)
end
end
defmodule MyApp.Statistic.Server do
def child_spec(team_id) do
%{
id: team_id,start: {__MODULE__,:start_link,[team_id]},restart: :transient
}
end
def start_link(team_id) do
GenServer.start_link(__MODULE__,%{team: team_id},name: via_tuple(team_id))
end
def init(state) do
{:ok,state}
end
defp via_tuple(team_id) do
{:via,:syn,{:team,team_id}}
end
end
代码正确。然后我用命令启动genserver:
MyApp.StatisticSupervisor.start_statistic(1)
>
{:ok,#PID<0.973.0>}
然后,我正在执行代码
DynamicSupervisor.which_children({:global,MyApp.StatisticSupervisor})
命令正在返回:
[
{:undefined,#PID<0.973.0>,:worker,[MyApp.Statistic.Server]}
]
我很困惑。为什么ID返回的是undefined而不是1?
我希望会被退回:
[
{1,[MyApp.Statistic.Server]}
]
与数字,原子或模块无关。标识符始终返回未定义。
是Elixir的错误吗?