В моей программе есть класс, который я хочу выделить перед входом в main(). Я хотел бы спрятать их в отдельный модуль, чтобы не загромождать свой код; Однако, как только модуль выходит из области видимости (до ввода main()), объекты освобождаются, и я пытаюсь использовать нулевую ссылку в main. Краткий пример:
// main.d
import SceneData;
int main(string[] argv)
{
start.onSceneEnter();
readln();
return 0;
}
// SceneData.d
import Scene;
public
{
Scene start;
}
static this()
{
Scene start = new Scene("start", "test", "test";
}
// Scene.d
import std.stdio;
class Scene
{
public
{
this(string name)
{
this.name = name;
}
this(string name, string descriptionOnEnter, string descriptionOnConnect)
{
this.name = name;
this.descriptionOnEnter = descriptionOnEnter;
this.descriptionOnConnect = descriptionOnConnect;
}
void onSceneEnter()
{
writeln(name);
writeln(descriptionOnEnter);
}
}
private
{
string name;
string descriptionOnEnter;
string descriptionOnConnect;
}
}
Я все еще привыкаю к тому, что модули являются базовой единицей инкапсуляции, в отличие от класса в C++ и Java. Возможно ли это сделать в D, или я должен перенести свои инициализации в основной модуль?