在“The D Programming Language”一书中,我看到以下内容:
通常
case
表达式是 编译时常量,但D允许 变量,也是保证 词汇顺序评估达到 第一场比赛。
代码:
void main()
{
string foo = "foo";
string bar = "bar";
string mrX;
switch (mrX)
{
case foo:
writeln(foo);
break;
case bar:
writeln(bar);
break;
default:
writeln("who knows");
}
}
结果:
错误:大小写必须是字符串或 积分常数,不是foo
怎么了?
PS。我使用DMD32 D Compiler v2.053
答案 0 :(得分:4)
这似乎是一个错误。它适用于int
类型的变量。我已经为你报告了这个错误:http://d.puremagic.com/issues/show_bug.cgi?id=6176
答案 1 :(得分:2)
也许这是一个错误,但它不能使用变量。我可以让你的例子像这样工作:
void main()
{
immutable string foo = "foo";
const string bar = "bar";
string mrX;
switch (mrX)
{
case to!string(foo):
writeln(foo);
break;
case to!string(bar):
writeln(bar);
break;
default:
writeln("who knows");
}
}