In some cases I use a global variable only from a small small number of 
functions, like foo() and main() here:


import std.stdio;
__gshared static int x = 10;
void foo() {
    // uses x
    writeln("foo");
}
void main() {
    auto fptr = &foo;
    fptr();
    auto y = x; // uses x
}


To write more tidy code in some of those situations I'd like a dot syntax to 
access static variables of a function:

void foo() {
    __gshared static int x = 10;
    // uses x
    writeln("foo");
}
void main() {
    auto fptr = &foo;
    fptr();
    auto y = foo.x; // uses foo.x
}



Its semantics is similar to just a struct with a static field and a static 
opCall:


import std.stdio;
struct Foo {
    __gshared static int x = 10;
    static void opCall() {
        // uses x
        writeln("foo");
    }
}
void main() {
    auto y = Foo.x;
    auto fptr = &Foo.opCall;
    fptr();
}


The advantage of using the dot syntax is that I don't need to modify the 
function code and turn it into a struct, with uppercase name, etc.

Bye,
bearophile

Reply via email to