[erlang-questions] Why no ?FUNCTION macro

G Bulmer <>
Fri Sep 21 18:02:31 CEST 2007


Adam

I'm just a newbie, so here's my solution:
-module(funnames).
-compile(export_all).

% -define(FUN, helper(process_info(self(),current_function))).
-define(FUN, case process_info(self(), current_function) of {_,  
{_,F,_}} -> F end).

toyfun() ->
     io:format("starting a function blah, blah, ...~n"),
     io:format("replacing ?FUN, and getting ~p~n", [?FUN]),
     io:format("finishing the function phew!~n").

% just a helper function while I was playing with formatting - it  
isn't used in this version of the code
helper({ current_function, {Mname, Fname, Arrity}}) ->
     atom_to_list(Mname) ++ ":" ++ atom_to_list(Fname) ++ "/" ++  
integer_to_list(Arrity).

I can't think of a neater way to extract the function name from the  
return value of process_info than the case ... end, but
hopefully, someone will make it even better.
Garry


> Mats and Garry,
>
> Actually that was exactly what I was looking for, I only had it in  
> mind like this (felt kind off natural):
>
> error_logger:error_report([{module, ?MODULE}, {function, ? 
> FUNCTION}, {error, Error}]).
>
> However, what you propose works well enough for my purposes!
>
> Thanks,
> Adam
>
> On 9/21/07, mats cronqvist < > wrote:On  
> Thu, 2007-09-20 at 15:35 +0100, G Bulmer wrote:
> [...]
> > As I said, this is only curiosity, but if the need is a run-time
> > name, maybe an ingenious function to dig through the stack trace
> > returned by erlang:get_stacktrace() would be workable.
>
>   in that case, i think something like this is a lot simpler;
>
> -define(LOG(T),error_logger:info_report([process_info(self 
> (),current_function)|T])).
>
>   e.g.
> go() -> ?LOG([{xxx,yyy}]).
>
>   will print
>
> =INFO REPORT==== 21-Sep-2007::11:08:38 ===
>     current_function: {foo,go,0}
>     xxx: yyy
>
>   mats
>
> _______________________________________________
> erlang-questions mailing list
> 
> http://www.erlang.org/mailman/listinfo/erlang-questions
>

Garry Bulmer

email: 
Home: +44 (0)24 7667 9497
Mobile: +44 (0)7726 880058






More information about the erlang-questions mailing list