我想在开始时创建一个需要多个状态的GenServer。特别是init
函数启动了一个需要知道几个初始状态的计时器。我理解GenServer.start_link
的第二个参数直接传递给init(arg)
。
但是,我无法找到一个示例,说明如何在init
中传递多个状态参数进行初始化。例如,可取的是:
defmodule Application.Test do
require GenServer
def start_link(state1, state2) do
GenServer.start_link(__MODULE__, [state1, state2], [])
end
def init(state) do
# Use the state to launch timer
end
end
然而,因为我可以' 找到一个例子,我对elixir来说真的很新,这对我来说似乎并不惯用。是否有更好/更有效的方法来做到这一点,还是这是最好的方式?
答案 0 :(得分:3)
只需将您的状态换成Tuple
或Struct
,就像这样:
start_link(state1, state2) do
Genserver.start_link(__MODULE__, {state1, state2}, [])
end
# use pattern matching to extract the states
def init({state1, state2}) do
# use state1 and state2
end