【发布时间】:2017-10-26 13:20:49
【问题描述】:
我有一个 elixir Genserver 模块,它使用 defstruct 进行初始化,但我不知道如何从它自己的私有模块中访问严格的数据。
这是它被初始化的结构:
defstruct info: "test_data"
...
这是代码的一部分。如果另一个进程想要从中获取信息,它需要知道它的 pid。状态会自动传入。
def get_info(pid), do: GenServer.call(pid, :get_info)
...
def handle_call(:get_info, _from, state), do: {:reply, state.info, state}
但是模块本身如何访问它初始化的结构呢?
def do_test(pid), do: GenServer.info(pid, :print_your_own_data_test)
...
def handle_info(:print_your_own_data_test, state) do
print_your_own_data_test()
{:noreply, state}
end
...
defp print_your_own_data_test() do #do I have to pass state here? from handle_info?
IO.put self.info # what goes here?
end
【问题讨论】:
-
是的,您需要手动传递状态。你试了有没有遇到什么错误?
-
不,在我提出这个问题之前,我正在做一些愚蠢的事情:我正在做 IO.puts get_info(pid) 所以它试图从句柄信息中调用句柄调用,这很荒谬,但我会试一试,看看它是否会出错。
标签: elixir gen-server