0
我有一個elixir Genserver模塊,它被初始化爲defstruct
但是我不知道如何從它自己的私有模塊中嚴格訪問數據。Elixir Genserver訪問它自己的結構數據
這是它獲取與初始化結構:
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
是的,您需要手動傳遞狀態。你有沒有嘗試過,並遇到任何錯誤? – Dogbert
不,我做了一些愚蠢的事情,直到我提出這個問題:我在做IO.puts get_info(pid),所以它試圖從句柄信息調用句柄調用,可笑,但我會試試看看是否它會給出錯誤。 –