我希望在开始时创建一个需要多个状态的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然而,由于我找不到一个例子,而且我对长生不老药真的很陌生,这在我看来并不是习以为常的。是否有更好/更有效的方法来做到这一点,或者这是最好的方法?
发布于 2017-10-24 05:49:56
只需将状态封装在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
endhttps://stackoverflow.com/questions/46902521
复制相似问题