fun question...

Dave Smith dave.smith.to@REDACTED
Tue Mar 30 19:23:55 CEST 2010


I have a scenario where I have a atom bound to a variable,  and I want to
construct a fun using this variable as the module name.   This is what I
have...

encode(CodecModule, CodePoints) when is_atom(CodecModule) ->
   encode(*fun(C) -> CodecModule:endode(C) end*, CodePoints);
encode(EncodeFn, CodePoints) ->
   {ok, list_to_binary(lists:map(EncodeFn, CodePoints))}.


This works fine, but I was expecting to be able to something like this...

encode(CodecModule, CodePoints) when is_atom(CodecModule) ->
   encode(*fun CodecModule:endode/1*, CodePoints);
encode(EncodeFn, CodePoints) ->
   {ok, list_to_binary(lists:map(EncodeFn, CodePoints))}.



I can call the function directly using the variable like this...
Bin = CodecModule:encode(CodePt).

So I was expecting this to work...
EncFn = fun  CodecModule:encode/1.

Can someone clarify?  Is this second form expanded at compiled time?
Is the first example above the best approach?



--DS


More information about the erlang-questions mailing list