Finding your calling module

Erik Stenman happi@REDACTED
Wed Feb 22 19:02:55 CET 2006


Tom Whitcomb wrote:

>I'm using a callback pattern similar to the approach used in the gen_server.  However, passing the module name around seems error prone and overly bound.  
>
>Can a called function can determine the name of the module of its calling function without passing the module name as a parameter?
>  
>
It depends on what you mean by "module of its calling function".
If you are using a pattern like gen_server and the call actually is a rpc
(a send between the caller and the callee) then I do not know how to do
it without explicitly passing the caller as an argument.

To find the closest caller on the callstack I have found the following hack
useful on occations.
(Note that tail-calls are not saved on the stack, and the solution is
 quite hacky... erlang_fault is not guaranteed to give a good stacktrace...)

calling_mod() ->
  element(1,lists:nth(2,element(2,element(2,catch erlang:fault([]))))).
calling_fun() ->
  element(2,lists:nth(2,element(2,element(2,catch erlang:fault([]))))).

/Erik (Happi) Stenman



More information about the erlang-questions mailing list