[erlang-questions] Overriding built-in functions in a module

Mikael Pettersson <>
Fri Jun 11 20:31:25 CEST 2010


Richard O'Keefe writes:
 > 
 > On Jun 10, 2010, at 1:40 AM, Raimo Niskanen wrote:
 > > I might argue that since it is a call to an exported function it  
 > > must be to
 > > some *other* function, not the local with the same name.
 > 
 > Why?  Suppose we have a module
 > 
 > 	-module(foo).
 > 	-export([bar/1]).
 > 	bar(N) when N > 0 -> ?MODULE:bar(N-1);
 > 	bar(0) -> 'DONG!'.
 > 
 > In what sense is the call to ?MODULE:bar/1 a call to some *other*
 > function than the bar/1 here before us?

Because in Erlang a call with both module and function names
supplied is a "remote" call, which always invokes the latest
version of the module whose name was given.  So if a process P
is executing code in version 1 of the module, a newer version
2 of the module is loaded, and P calls ?MODULE:F(...), then
that call invokes F in version 2 of the module, not version 1.


More information about the erlang-questions mailing list