0

Flash エラー 1151 に関する奇妙な問題があります: 内部名前空間の定義 i との競合が存在します。

問題のあるコードは次のとおりです。

for(var i:Number=dt.getFullYear(); i >= dt.getFullYear()-90; i--)
{
    dtYear.addItem( {label:i, data:i} );
} //for

//-*-*-* Month
for(var i:Number=0; i < months.length; i++)
{
    dtMonth.addItem( {label:i, data:i} );
} //for

または、より露骨な例:

for(var i:Number=0; i < 12; i++)
{
    trace(i);
} //for

//-*-*-* Month
for(var i:Number=0; i < 12; i++)
{
} //for

Adobe は次のように説明しています。

You cannot declare more than one variable with the same identifier name within the same scope unless all such variables are declared to be of the same type. In ActionScript 3.0, different code blocks (such as those used in two for loops in the same function definition) are considered to be in the same scope.

これは何だ?つまり、i 変数は常に Number として存在し、Number として型キャストされます。なぜ上記のコードが失敗するのでしょうか?

このように変更すると機能しますが、それは醜く、なぜこれが必要なのですか? AAARGGGGHHHH...Flash 開発は私を夢中にさせます。銃をください:)。誰か私にこれを説明してください。

作業コード:

for(var i:Number=dt.getFullYear(); i >= dt.getFullYear()-90; i--)
{
    dtYear.addItem( {label:i, data:i} );
} //for

//-*-*-* Month
for(i=0; i < months.length; i++)
{
    dtMonth.addItem( {label:i, data:i} );
} //for
4

2 に答える 2

3

これは変数巻き上げと呼ばれます。as3 には変数のスコープがありません。コンパイラは宣言されたすべての変数を関数の先頭に移動するため、同じ関数で同じ変数を 2 回宣言することはできません。

詳細については、変数の使用法と宣言に関するドキュメントを参照してください。

于 2010-07-25T18:48:01.390 に答える
2

簡単な答え: 同じ関数で "var i" を 2 回宣言することはできません。2 番目のループで、「i」を「j」に変更すると、ゴールドになります。

于 2010-07-25T18:51:01.603 に答える