Imports

Mike Parker aldacron at gmail.com
Thu Oct 5 12:35:26 UTC 2017


On Thursday, 5 October 2017 at 12:25:27 UTC, Mike Parker wrote:

>
> And actually, now that I think about it, this is probably one 
> of those situations where the defualt fails. So yes, you'll 
> need a module name.

Right. I had to go back and look at what I wrote in Learning D, 
which is the last (and only) time I played around with the 
default module behavior. I always use module statements (and you 
should too).

When you import dir.sub and the compiler finds it's missing in 
its imported module list, it will look in for the `dir/sub.d` 
from the current working directory. If it doesn't find it, you 
get an import error. If you do this:

dmd main.d ../dir/sub.d

Then sub.d can have any module statement you want -- you could do 
this:

module this.is.the.sub.module;

And it wouldn't matter, as long as main.d imported 
this.is.the.sub.module and not dir.sub. However, if sub.d has no 
module statement, the compiler isn't going to infer a package. 
It's going to be in the default package, so it's simply `sub` and 
not `dir.sub`. If you import dir.sub, the compiler will still 
look for a subdirectory named `dir`, but it won't find it.

This latter bit is your issue. dub is passing dir/sub.d to the 
compiler, but without a module statement the compiler treats it 
simply as `sub` and your `dir.sub` import fails.


More information about the Digitalmars-d-learn mailing list