我正在按照LYAE的指南尝试erlang的热代码功能,但我不明白如何update
触发消息。
我有一个运行可升级方法的模块:
模组
-module(upgrade).
-export([main/1,upgrade/1,init/1,init_link/1]).
-record(state,{ version=0,comments=""}).
init(State)->
spawn(?MODULE,main,[State]).
main(State)->
receive
update->
NewState=?MODULE:upgrade(State),
if NewState#state.version>3 -> exit("Max Version Reached") end,
?MODULE:main(NewState);
SomeMessage->
main(State)
end.
upgrade(State=#state{version=Version,comments=Comments})->
Comm=case Version rem 2 of
0 -> "Even version";
_ -> "Uneven version"
end,
#state{version=Version+1,comments=Comm}.
贝壳
>c(upgrade).
>rr(upgrade,state).
>U=upgrade:init(#state{version=0,comments="initial"}).
>Monitor=monitor(process,U).
> ......to something to trigger the update message
> flush(). % see the exit message reason
我不明白如何才能执行热代码重新加载以触发update
消息。我想要flush
从我的main
方法中获取退出原因。
该过程希望获得原子update
作为消息。由于您的变量中包含进程的pid,因此U
可以发送如下消息:
U ! update.
请注意,字符串Even version
和Uneven version
仅保持状态,从不打印,因此您不会看到它们。发送update
四次并调用后,您将看到的唯一消息是退出消息flush()
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句