Effective D book?
Peter Alexander
peter.alexander.au at gmail.com
Sat Jun 15 09:06:26 PDT 2013
On Saturday, 15 June 2013 at 15:29:23 UTC, Mr. Anonymous wrote:
> On Saturday, 15 June 2013 at 15:09:55 UTC, Peter Alexander
> wrote:
>> On Saturday, 15 June 2013 at 12:20:46 UTC, Timon Gehr wrote:
>>> One issue with local imports is that they hide local symbols.
>>
>> Can you give an example? I can't repro.
>>
>> void main()
>> {
>> import std.stdio;
>> void writeln(string) {}
>> writeln("foo");
>> std.stdio.writeln("bar");
>> }
>>
>> This writes only "bar".
>
> void writeln(string) {}
> void main()
> {
> import std.stdio;
> writeln("foo");
> std.stdio.writeln("bar");
> }
Oh, but that's not a local symbol, that's a module level symbol.
The import is more local that the module level writeln, so that
works as you would expect.
It also isn't a problem at all, because you can easily refer to
the module level symbol by fully qualifying it.
module thismodule;
void writeln(string) {}
void main()
{
import std.stdio;
thismodule.writeln("foo");
std.stdio.writeln("bar");
}
In any case, I'd recommend explicitly choosing which symbols to
import in the local import to avoid name clashes.
More information about the Digitalmars-d
mailing list