Error when using `import`.
Steven Schveighoffer
schveiguy at gmail.com
Tue Feb 27 03:01:07 UTC 2024
On Monday, 26 February 2024 at 22:40:49 UTC, Liam McGillivray
wrote:
> On Sunday, 25 February 2024 at 03:23:03 UTC, Paul Backus wrote:
>> You can't give a class the same name as the file it's in. If
>> you do, then when you try to use it from another file, the
>> compiler will get confused and think you're referring to the
>> file instead of the class (that's what "import is used as a
>> type" means).
>
> Thank you. In PHP, I was told to put every class definition in
> a file of the same name (whether I like it or not).
>
> However, I actually now have it working *without* having done
> that. Both the file name and the class name are capitalized,
> and it's working. However, maybe that's because they each start
> with a `module` line that makes the module name lowercase. I
> will keep this in mind, and maybe rename the files.
So D is weird about this. I always recommend you use a *package*
(i.e. module foo.bar) instead of just a module (i.e. module bar).
When you omit the module declaration, the compiler assumes the
module name is the same as the file name *without the path taken
into account*.
What happens is if you have `Map` as a module, and then `Map` as
the class name, using the name `Map` is going to be confusing
(did you mean the module or the class?)
However, if you have everything under a package, for example
`foo`, i.e. a file `foo/Map.d` which contains the `Map` class,
then when referring to `Map`, it can't be referring to the
module, since you would have to refer to `foo.Map` for that. This
means the class name `Map` by itself is unambiguous.
A whole host of problems occurs with name lookup when you don't
use packages.
-Steve
More information about the Digitalmars-d-learn
mailing list