2

次のようなコードがあります。

var variableX:uint = something;    

if (variableX > 1)
{
  var variableY:uint = foo;
}
else
{
  var variableY:uint = bar;
}

FlashDevelop でコンパイルすると、コンパイラは次の警告を表示します。

Warning: Duplicate variable definition.

AS3 とプログラミングの初心者である私は、コンパイラの警告が好きではありません。編集者は目を細めて私を見て、「わかりました、相棒、今回はやめましょう。でも警告します!」と言っています。そして、私がしていることの何がそんなに悪いのか教えてくれません。

このようなことをするとき、何に注意すればよいですか?私は明らかに変数を外部で定義することができif、これは問題にならないということですが、これにはもっと何かがあるのでしょうか? それとも、コンパイラは「ねえ、同じ名前の 2 つの異なる変数を誤って作成した可能性があります」という役立つナッジを提供しているだけですか?

4

1 に答える 1

4

警告の評価は正しいです。スコープ内にその名前の変数が既に存在し、それを再定義しようとしていることを知らせるだけです。このようにして、変数を誤って上書きすることはありません。このページで変数の巻き上げを確認すると、同じ範囲にあるようには見えないかもしれませんが、http: //help.adobe.com/en_US/ActionScript/3.0_ProgrammingAS3/WS5b3ccc516d4fbf351e63e3d118a9b90204-7f9d. html

ブロック レベルのスコープがないことの興味深い点は、関数が終了する前に変数が宣言されている限り、宣言される前に変数を読み書きできることです。これは、コンパイラがすべての変数宣言を関数の先頭に移動することを意味するホイストと呼ばれる手法によるものです。たとえば、num 変数が宣言される前に num 変数の最初の trace() 関数が発生しても、次のコードはコンパイルされます。

私の個人的な傾向は、より重要な問題を見逃すような余分な警告が表示されるのを避けるために、自分で定義を一番上に置くことです。しばらくの間 AS3 から離れていましたが、大規模なプロジェクトでは人々が物事を手放し、最終的には数百から数千の警告が表示され、関連する警告が埋もれてしまいます。

于 2013-06-26T21:06:57.467 に答える