动态加载代码,个人理解就是另外开一条进程A,初始化的时候,远程调用,发送一个函数f1发送过去,然后一直保持receive ,阻塞状状态。
举例说明
event_handler 为事件处理,可以理解为服务器,可以动态加载代码。
-module(event_handler).
-compile(export_all).
make(Name) ->
register(Name,spawn(fun() -> my_handler(fun no_op/1) end)).
my_handler(Fun) ->
receive
{add,Fun1} ->
my_handler(Fun1);
{event,Any} ->
(catch Fun(Any)),
my_handler(Fun)
end.
no_op(_) ->void.
add_handler(Name,Fun) ->
Name ! {add,Fun}.
event(Name,X) ->Name ! {event , X}.
motor_controller 为回调模块
-module(motor_controller).
-compile(export_all).
add_event_handler() ->
event_handler:add_handler(errors,fun controller/1).
controller(too_hot) ->
io:format("Turn off the motor~n");
controller(X) ->
io:format("~w ignored event:~p~n",[?MODULE,X]).</