D2:switch语句和变量

时间:2011-06-19 09:49:43

标签: d dmd

在“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

2 个答案:

答案 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");
   }
}