3

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

結果:

エラー: case は、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 に答える