D2: оператор переключения и переменные - PullRequest
3 голосов
/ 19 июня 2011

В книге «Язык программирования D» я вижу следующее:

Обычно выражения 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 ]

4 голосов
/ 19 июня 2011

Кажется, это ошибка.Он отлично работает с переменными типа int.Я сообщил об ошибке для вас: http://d.puremagic.com/issues/show_bug.cgi?id=6176

2 голосов
/ 19 июня 2011

Возможно, это ошибка, но она не может использовать переменные.Я мог бы заставить ваш пример работать так:

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