Dot syntax to access static variables of functions

Timon Gehr timon.gehr at gmx.ch
Fri Dec 16 00:09:36 PST 2011


On 12/16/2011 12:48 AM, bearophile wrote:
> 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

Local variables are not part of the function interface. They are 
implementation details.




More information about the Digitalmars-d mailing list