[erlang-questions] Construct a function refrence from variables

Andreas Hillqvist <>
Thu Oct 25 16:17:03 CEST 2007

In your case when the number of arguments is known, just pass the name
of the module and call it with:

     1> Mod = io.
     2> Mod:format("test~n").

This is how call backs for gen_server is called.
But it requires that the receiver knows the name of the function.

But using this principle you can pass a the modules nme as an atom, or
a both module and functions name as a tuple:

     do(Fun) when is_function(Fun) ->
         Data = "FooBar",
     do(Module) when is_atom(Module) ->
         Data = "FooBar",
     do({Module, Function}) ->
         Data = "FooBar",

Or you can make this into a fun:

     1> Mod = io.
     2>Fun = fun(Data) -> Mod:format(Data) end.

But fun's are slower then the Module:Function(Data) call.

Andreas Hillqvist


From: William FINK
Sent: den 25 oktober 2007 13:28
To: TrapExit
Subject: [erlang-questions] Construct a function refrence from variables

If I need a function reference, I use this syntax:

> Fun = fun io:format/1.

> Fun("test~n").

Now, I want to construct my function reference from a module name:

> Mod = io.
1> Fun2 = Mod:format/1.
** 1: illegal expression **

The problem is that I need to call a function from an unknown module quite a lot
Calling apply each time will be slower than using a function reference.

How can I construct a function reference from variables ?

William FINK

More information about the erlang-questions mailing list