3

在“The D Programming Language”一书中,我看到以下内容:

通常case表达式是编译时常量,但 D 也允许 variables,并保证词法顺序评估直到第一个匹配。

代码:

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 编译器 v2.053

4

2 回答 2

4

这似乎是一个错误。它适用于 type 的变量int。我已经为你报告了这个错误:http ://d.puremagic.com/issues/show_bug.cgi?id=6176

于 2011-06-19T10:55:34.260 回答
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");
   }
}
于 2011-06-19T10:49:45.627 回答