![](/img/trans.png)
[英]Elixir's GenServer handle_call, handle_info, handle_cast not being invoked
[英]Is it allowed to access `GenServer`'s defstruct data from handle_call etc function?
GenServer
进程有一个 state,它通过以下调用链传递:
start_link/3
→ init/1
→[ handle_continue/2
]→ handle_×××/{2,3}
→ terminate/1
这个 state 由虚拟机管理,这就是有状态对象(例如参与者模型中的进程)的存在方式。 以上所有函数的返回值都是进程的新state(嗯,返回的元组的一个元素。)
struct 只是一个结构,它是一个erlang术语,如列表,或原子,或 map(它们确实是下面的映射。) :foo
术语和%{foo: :bar}
术语和%Baz{foo: :bar}
之间没有区别%Baz{foo: :bar}
从生命周期的角度来看术语。 在没有人需要它们之后,它们被创建为不可变和垃圾收集。 它们只是术语,大量 static 数据。
是否需要在进程的生命周期中携带一个struct,应该放到进程'state中,就是这样。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.