使用foreach循环 - 无法读取变量

Dr.*_*eon 3 d mixins dmd

应该相当简单,但事实并非如此.

这是我的代码:

string cases()
{
    string ret = "";
    string[] methods;

    methods = [__traits(derivedMembers,mixin("Math"))];
    foreach (string s; methods) ret ~= "case \"" ~ s ~ "\": return Math."~s~"(params);";

    methods = [__traits(derivedMembers,mixin("OtherClass"))];
    foreach (string s; methods) ret ~= "case \"" ~ s ~ "\": return OtherClass."~s~"(params);";

    return ret;
}

string execute(string what, string[] params)
{
    switch (what)
    {
        mixin(cases());
        default: break;
    }
    return "";
}
Run Code Online (Sandbox Code Playgroud)

我想做的事 :

const string[] arrayWithClassNames = ["Math","SomeClass"];
foreach (string s; arrayWithClassNames)
{
     methods = ...
     foreach ...
}
Run Code Online (Sandbox Code Playgroud)

相当简单吧?事情就是抱怨说:

variable 's' cannot be read at compile time. 
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

Vla*_*eev 5

要创建编译时循环,需要迭代元组.试试这个:

alias classNames = TypeTuple!("Math","SomeClass");
foreach (string s; classNames)
{
    ...
}
Run Code Online (Sandbox Code Playgroud)