On Wednesday, 10 June 2015 at 03:38:32 UTC, Ali Çehreli wrote:
The way I understand it and the way it makes sense to me, :) variables that are generated at compile time can be initialized only once. It is not possible after initialization. However, the initialization of the variable can be as complex as needed:

Thanks. It turns out I can do this:

import std.stdio;

auto merge(Hashes)(Hashes[] hashes...) {

    int[][int][int] result;

    foreach (hash; hashes) {
        foreach (key, value; hash) {
            result[key] = value;
        }
    }

    return result;
}

enum firstPart = [1 : [ 1 : [1, 1] ] ];
enum secondPart = [2 : [ 2 : [2, 2] ] ];

int[][int][int] init_ctHash(int i) {

    auto result = merge(firstPart, secondPart);

    result[i] = [ i : [i, i] ];

    return result;
}

void main() {

    enum int[][int][int] ctHash = init_ctHash(5);

    enum t = merge(ctHash, init_ctHash(6));

    writeln(t);
}

But I can not do so:

enum int[][int][int] ctHash = init_ctHash(5);

ctHash = merge(ctHash, init_ctHash(6));

I have a question: why variables may not be initialized more than once? Why can't they to resave at compile time?

Reply via email to