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