用不止一件事初始化 GenServer 状态
Initializing GenServer state with more than one thing
我想创建一个开始时需要多个状态的 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
但是,既然我可以'
找不到一个例子,而且我对长生不老药真的很陌生,这对我来说似乎不是惯用的。有没有 better/more 有效的方法,或者这是最好的方法?
只需将您的状态包装在 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
我想创建一个开始时需要多个状态的 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
但是,既然我可以' 找不到一个例子,而且我对长生不老药真的很陌生,这对我来说似乎不是惯用的。有没有 better/more 有效的方法,或者这是最好的方法?
只需将您的状态包装在 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