Что означает "static this()" вне класса?

Я очень хорошо знаю статические конструкторы, но что значит иметь static this() вне класса?

import std.stdio;

static this(){

  int x = 0;

}


int main(){

  writeln(x); // error

  return 0;
}

И как мне получить доступ к переменным define в static this()?

Ответ 1

Это конструктор модуля. Вы можете прочитать о них здесь: http://www.digitalmars.com/d/2.0/module.html

Очевидно, что вы не можете получить доступ к x в своем примере, потому что это локальная переменная конструктора модуля, так же, как вы не могли бы сделать это с помощью конструктора классов. Но вы можете получить доступ к глобальным глобальным областям (и инициализировать их, для чего предназначены конструкторы модулей).

Ответ 2

Это конструктор модуля. Этот код запускается один раз для каждого потока (включая основной поток).

Существуют также деструкторы модулей, а также общие конструкторы и деструкторы модулей:

static this()
{
   writeln("This is run on the creation of each thread.");
}

static ~this()
{
   writeln("This is run on the destruction of each thread.");
}

shared static this()
{
   writeln("This is run once at the start of the program.");
}

shared static ~this()
{
   writeln("This is run once at the end of the program.");
}

Целью этого является в основном инициализация и деинициализация глобальных переменных.