actionscript-3 – Flash Actionscript 3 Bug?在开关/箱中使用i
运行这段代码
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; } 给出这个输出: 2 == 0 -2 is unknown (在Flash Builder 4.7.0.349722中编译,在Flash 11.5.502.149上运行,在Windows 7 SP1,Firefox 18.0.2中运行) 以下更改将修复上述问题,并提供正确的输出: >将值类型更改为数字。 更改myValue2 = -1给出输出-1 == -3,这同样是wtf-ish。 显然这是一个bug,但是…是什么原因呢?在我不明白的case-statement中是否有使用int或负数的细微差别?我的代码是否有错误?或者这是Flash Builder中的字节码编译器的问题吗? 解决方法
我不认为你会在这个问题上找到具体的答案。
我可以提供的是AS3编译器bugginess的确认。 我花了相当多的时间试图解决类似的“神奇”错误,并提出了空白。 一个这样的例子是一个For和While循环跳过数组中的第一个或最后一个项目,没有明显的原因,而Foreach循环工作正常。 对我来说,最可信的原因是内存管理错误。这可能也是硬件相关的,因为我或我的同事在一些机器上发生的这种事情发生的频率更高。我认为是一些“看不见”的条件,例如执行操作的顺序(您可以尝试将一些虚拟代码放在var声明和开关之间,或者可能更多次分配var值对,只是为了“慢跑内存”),与容易出错的编译器相结合会使内存丢失寻址和你的交换机认为它的两个整数,而实际上它与内存不同的价值。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |