首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Flash ActionScript 3 Bug?在开关/大小写中使用整数和负数?

Flash ActionScript 3 Bug?在开关/大小写中使用整数和负数?
EN

Stack Overflow用户
提问于 2018-02-05 01:15:24
回答 3查看 0关注 0票数 0

运行此代码

代码语言:javascript
复制
var myValue1:int = 2;
switch (myValue1)
{
    case -3: trace(myValue1 + " == -3"); break;
    case -2: trace(myValue1 + " == -2"); break;
    case -1: trace(myValue1 + " == -1"); break;
    case 0:  trace(myValue1 + " == 0"); break;
    case 1:  trace(myValue1 + " == 1"); break;
    case 2:  trace(myValue1 + " == 2"); break;
    case 3:  trace(myValue1 + " == 3"); break;
    default: trace(myValue1 + " is unknown"); break;
}

var myValue2:int = -2;
switch (myValue2)
{
    case -3: trace(myValue2 + " == -3"); break;
    case -2: trace(myValue2 + " == -2"); break;
    case -1: trace(myValue2 + " == -1"); break;
    case 0:  trace(myValue2 + " == 0"); break;
    case 1:  trace(myValue2 + " == 1"); break;
    case 2:  trace(myValue2 + " == 2"); break;
    case 3:  trace(myValue2 + " == 3"); break;
    default: trace(myValue2 + " is unknown"); break;
}

给出这个输出:

代码语言:javascript
复制
2 == 0
-2 is unknown

(用Flash Builder 4.7.0.349722编译,运行在Flash 11.5.502.149上。运行在Windows 7 SP1,Firefox 18.0.2中)

以下更改都修复了上述问题,并给出了正确的输出:

  • 将值类型更改为Number...
  • 移除负数case
  • 更改case语句使用int---变量而不是文字...除非这些变量也是const在这种情况下。

改变myValue2 = -1给出输出-1 == -3,这也是同样的意思。

很明显这是个bug但是...是什么原因造成的?是否有一些微妙的细微差别int或者我不明白的负数?我的代码有错吗?或者这只是FlashBuilder中字节码编译器的一个问题?

EN

回答 3

Stack Overflow用户

发布于 2018-02-05 09:12:32

内存管理方面的错误。这也可能与硬件有关。我认为一些“不可见的”条件是满足的,例如执行操作的顺序(您可以尝试在var声明和开关之间放置一些虚拟代码,或者可能将var值赋值多几次。只是为了‘启动内存’),它与容易出错的编译器结合在一起,就会使内存寻址混乱,而您的开关认为它包含两个整数,而在现实中,它得到的值与内存不同。

票数 0
EN

Stack Overflow用户

发布于 2018-02-05 09:15:58

您可能可以通过将原始值转换为字符串并将您的情况转换为字符串值来强制编译器的操作。

代码语言:javascript
复制
switch( String(value) )
{
   case "-3": /*do something*/; break;
   case "-2": /*do something*/; break;
   case "-1": /*do something*/; break;
   case  "0": /*do something*/; break;
   case  "1": /*do something*/; break;
   case  "2": /*do something*/; break;
   case  "3": /*do something*/; break;
   default: break;
}
票数 0
EN

Stack Overflow用户

发布于 2018-02-05 10:16:19

这只是Flash Builder中字节码编译器的一个问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100007317

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档