Я пытаюсь использовать функцию горячего кода erlang, следуя инструкциям из LYAE , но я не понимаю, как сделать сообщение 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
метода.