我有一个D mixin,我想用它来生成一个关于字符串值的switch语句(特别是case值),但是尽管KeyValues有条目并提供了正确的键值,默认情况总是唯一执行的:
class DataStore(KeyValues...) {
void stringSetData(string key, string data) {
switch(key) {
foreach(D; KeyValues) {
mixin("case \"" ~ D.Name ~ "\": set(to!(D.Type)(data)); break;");
}
default:
throw new Exception("Invalid meta key"); break;
}
}
}
Run Code Online (Sandbox Code Playgroud)
我用硬编码的值测试了它,并且它按预期工作,所以我怀疑我可能在我的mixin本身做错了.我怎样才能让它按预期工作?
该break内部混入从破foreach环,而不是switch.将其替换为return或贴上标签break.
顺便说一句,如果您尝试在启用警告的情况下编译此代码,则会从DMD获得一些奇怪的错误消息.