使用多个内容初始化GenServer状态

时间:2017-10-24 04:59:06

标签: elixir state otp

我想在开始时创建一个需要多个状态的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来说真的很新,这对我来说似乎并不惯用。是否有更好/更有效的方法来做到这一点,还是这是最好的方式?

1 个答案:

答案 0 :(得分:3)

只需将您的状态换成TupleStruct,就像这样:

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