gpt4 book ai didi

actionscript-3 - Flash Actionscript 3错误?在开关/案例中使用整数和负数

转载 作者:行者123 更新时间:2023-12-03 12:20:01 25 4
gpt4 key购买 nike

运行这段代码

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未知

(在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,同样是wtf-ish。

    显然,这是一个错误,但是...是什么原因引起的?在我不理解的案例陈述中,使用 int或负数是否有些细微差别?我的代码有什么不对吗?还是这仅仅是Flash Builder中字节码编译器的问题?

    最佳答案

    我认为您不会找到这个问题的具体答案。
    我可以提供的是对AS3编译器错误的确认。
    我花了很多时间试图解决类似的“魔术”错误,然后空了出来。
    一个这样的示例是For和While循环,无明显原因跳过Array中的第一项或最后一项,而Foreach循环工作得很好。

    对我而言,最合理的原因是内存管理中的错误。
    这也可能与硬件有关,因为在我或同事工作过的某些机器上,发生这种事情的频率更高。
    我认为是满足了一些“隐形”条件,例如所执行操作的顺序(您可以尝试在var声明和开关之间放置一些伪代码,或者可以多次分配var值,只是为了“慢跑内存”),并与容易出错的编译器相结合,导致内存困惑寻址,您的交换机认为它是两个整数的乘积,而实际上它的值与内存不同。

    关于actionscript-3 - Flash Actionscript 3错误?在开关/案例中使用整数和负数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14762373/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com