Are public/private imports implemented?

Tyro[a.c.edwards] no at spam.com
Mon Jan 21 14:08:21 PST 2008


Bill Baxter さんは書きました:
> Tyro[a.c.edwards] wrote:
>> Ary Borenszweig ????????:
>>> Again, testing some Descent semantic code, I was getting errors on 
>>> undefined functions.
>>>
>>> ---
>>> module one;
>>>
>>> import two;
>>>
>>> void foo() {
>>>     char[] srcfilename = std.path.join("one", "two");
>>> }
>>> ---
>>>
>>> ---
>>> module two;
>>>
>>> import std.path; // same with "private import std.path;"
>>> ---
>>>
>>> I was getting an error on "std.path.join", because since the import 
>>> on module two is private, join is not visible. But DMD seems to 
>>> compile it without problems. What's the truth about imports?
>>
>> module imports are private by default. This means that since you 
>> "privately" imported std.path into module two, then the entire content 
>> of the std.path module becomes visible to module two, and module two 
>> alone. As a result std.path is not defined in module one. In order for 
>> it to be defined, you would also need to import std.path in module one 
>> or do "public import std.path;" in module two.
> 
> The truth seems to be more that fully qualified names are always made 
> public.
> http://d.puremagic.com/issues/show_bug.cgi?id=314.
> 
> --bb

I thought I ran across that bug a few weeks back when I bought and 
started reading "Learn to Tango with D" but somehow managed to convince 
myself that it didn't exist.

Thanks bb.

Andrew


More information about the Digitalmars-d-learn mailing list