D2:switch语句和变量

发布于 2024-11-15 21:49:52 字数 579 浏览 5 评论 0原文

在《The 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

有什么问题吗?

附言。我使用DMD32 D编译器v2.053

In "The D Programming Language" book I see the following:

Usually the case expressions are
compile-time constants, but D allows
variables, too, and guarantees
lexical-order evaluation up to the
first match.

Code:

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

Result:

Error: case must be a string or an
integral constant, not foo

What's wrong?

PS. I use DMD32 D Compiler v2.053

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

掩于岁月 2024-11-22 21:49:52

这似乎是一个错误。它可以很好地处理 int 类型的变量。我已经为您报告了该错误:http://d.puremagic.com/问题/show_bug.cgi?id=6176

It appears to be a bug. It works just fine with variables of type int. I've reported the bug for you: http://d.puremagic.com/issues/show_bug.cgi?id=6176

丘比特射中我 2024-11-22 21:49:52

也许这是一个错误,但它不能使用变量。我可以让你的例子像这样工作:

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

Maybe it's a bug but it can't use variables. I could get your example to work like this:

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");
   }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文