Что означает "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.");
}
Целью этого является в основном инициализация и деинициализация глобальных переменных.