2007/06/18

Erlang error_handler

定義されていない関数が呼ばれたときのハンドラです。
定義されていない関数が呼ばれた場合 error_handler:undefined_function/3 が呼ばれます。
error_handler:undefined_function/3 は呼ばれた関数のモジュールをロードし、ロードできればその関数をもう一度呼んでみる、とうような動きをします。

error_handler:undefined_function/3 をユーザ定義の関数で置き換えることができます。
マニュアルには危険なので要注意、とうようなことが書かれていますが、この機能でモジュールの継承のようなものができないでしょうか。


-module(my_module).
-compile(export_all).

undefined_function(my_module, Func, Args) ->
io:format("no sush funciton!! ~p:~p(~p)~n", [my_module, Func, Args]);
undefined_function(Module, Func, Args) ->
io:format("original handler...~n"),
error_handler:undefined_function(Module, Func, Args).

test() ->
process_flag(error_handler, my_module),
my_module:foo("Hello"),
xxxx:yyyy(zzzz).

0 件のコメント: