--- Robert Baruch <autophile@REDACTED> 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