[erlang-questions] lists:reverse/1 as a built-in function

Thomas Lindgren <>
Tue Jan 16 18:25:14 CET 2007


--- Robert Baruch <> wrote:

> If example_function/1 is imported into module m,
> then it must be  
> imported from some module X. Then you must call X's
> example_function/ 
> 1 as X:example_function/1, and m's function would
> just be called as  
> example_function/1. The names would not clash
> because they exist in  
> different namespaces.

Well, one might think so. (I for one think the
language should behave that way: local definitions
hide enclosing ones with the same name.) But currently
the result depends on whether example_function is
explicitly imported or auto-imported.

So, to recapitulate: example_function is locally
defined and also imported.

1. If example_function is explicitly imported (with
-import), we get a compilation error. (Apparently,
this is seen as a name clash that can't be resolved.)

Example:
-module(test1).
-compile(export_all).
-import(other_m, [g/1]).

f(X) -> g(X).
g(X) -> X.

2. If example_function is auto-imported, we get a
compiler warning, and the call will invoke the BIF,
not the local function. (The name clash is resolved
"the wrong way")

Example:
-module(test).
-compile(export_all).

f(X) -> element(1,X).
element(A,X) -> X.

(Try test:f({a}).)

Best,
Thomas



 
____________________________________________________________________________________
8:00? 8:25? 8:40? Find a flick in no time 
with the Yahoo! Search movie showtime shortcut.
http://tools.search.yahoo.com/shortcuts/#news



More information about the erlang-questions mailing list