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