gpt4 book ai didi

actionscript-3 - For 循环变量作用域混淆

转载 作者:行者123 更新时间:2023-12-04 00:32:56 26 4
gpt4 key购买 nike

我注意到 for 循环中变量的奇怪行为。这不是一个真正的问题,但它让我很不安。
实际上,我以这种方式创建了两个循环:

for (var i:uint; i<19; i++) SomeFunction (i);
for (var i:uint; i<26; i++) SomeOtherFunction (i);

我收到的是编译警告: Warning: Duplicate variable definition.
这个警告真的让我感到惊讶。在其他语言中,我从未发生过这样的事情。
看来 i变量进入层次结构中较高的范围,并在循环块之外变得可用。我也试过用花括号包含循环块,但它没有改变任何东西。
为什么会发生?正常吗?有可能避免吗?现在我只是为这两个变量设置了不同的名称,但我认为这不是一个真正的解决方案。我真的很想使用 i -在我的大多数 for 循环中命名变量。

最佳答案

是的,循环增量变量在循环父级的范围内,而不是在循环本身内。这是故意的,例如这样的例子:

public function getPositionOfValue ( value:String ) : int
{
for ( var i:int = 0; i < someArray; i++ )
{
if (someArray[i] == value )
{
break;
}
}

return i;
}

这允许您在循环结束后访问 i 的值。在很多情况下,这非常有用。

在同一范围内有多个循环的情况下,您应该做的是循环外的 var i :
public function getPositionOfValue ( value:String ) : int
{
var i:int;

for ( i = 0; i < 15; i++ )
{
//do something
}

for ( i = 0; i < 29; i++ )
{
//do something else
}

return i;
}

然后你摆脱你的警告。要考虑的另一件事是将循环增量变量命名为更具描述性的名称。

更新:需要考虑的另外两件事:

1) 除了颜色和 Flex 需要 uint 的地方之外,您不应该使用 uint。它们的使用速度比 int 慢。来源] 1更新:看起来在较新版本的 Flash 播放器中可能不再是这种情况: source

2) 当您在循环声明中更改循环增量变量时,您需要确保将其设置为正确的初始化值,通常为 0。如果不这样做,您可能会很难追踪错误。

关于actionscript-3 - For 循环变量作用域混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4479896/

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