On 02/18/2013 08:59 AM, Lubos Pintes wrote:
> Yesterday I solved similar problem by using enum.
> enum GameInfo[string] games=[
> ...
> ];

Be careful with that though: 'games' is a literal associative array, meaning that it will be used in the program as if it's copy-pasted in that location. It looks like there is a single associative array, but there is a new temporary created every time you use 'games':

struct GameInfo
{
    int i;
}

enum GameInfo[string] games = [ "one" : GameInfo(1) ];

void main()
{
    assert(&(games["one"]) != &(games["one"]));    // note: !=
}

As the two games are different, their elements are not at the same location.

This is one way to go:

struct GameInfo
{
    int i;
}

static immutable GameInfo[string] games;

static this()
{
    games = [ "one" : GameInfo(1) ];
}

void main()
{
    assert(&(games["one"]) == &(games["one"]));    // note ==
}

This time there is just one 'games'.

Ali

Reply via email to