Foo Foo = new Foo();

Adam D. Ruppe destructionator at gmail.com
Sun Feb 21 21:14:23 UTC 2021


On Sunday, 21 February 2021 at 21:03:27 UTC, Jack wrote:
> Why doesn't this compiles?
>
> class Baa
> {
> 	Foo Foo = new Foo();
> }

Local variables inside functions are a little bit special because 
everything happens in sequence. This is a declaration, where 
there is a new namespace, but order doesn't matter.

So in the function:

void foo() {
     // there is no local variable Foo yet until after this line,
     // so there is no ambiguity - only existing Foo here is the 
class outside
     Foo Foo = new Foo();
     // Foo now refers to the local variable

     // same as if you did
     x++; // error: x doesn't exist yet
     int x; // only AFTER this point does x exist
}

But in the class:

class foo {
     // the names in here are all created simultaneously
     // and thus the local Foo is considered existing as it
     // looks up the name Foo
     Foo Foo = new Foo();

     // same as if you did
     int y = x; // error is "Variable x not readable at compile 
time", NOT "no such variable" because all declarations flash into 
existence simultaneously
     int x; // this line and the above could be swapped without 
changing anything
}


So the local variable isn't special just because of the 
namespace, it is also special because order matters inside 
functions but not outside.



More information about the Digitalmars-d-learn mailing list