0

「this」は、関数内で明確に宣言されているにもかかわらず、適切な変数「array1」を見つけることができません。しかし、関数の外で変数を宣言すると、機能します。関数内に変数を持ちながら、それを機能させ続けるにはどうすればよいですか?

package 
{

public class main extends MovieClip
{
//If I declared the variables here it would work.
    public function main():void
    {
        var array1:Array = [1,2];
        var array2:Array = [3,4];
        trace(this["array"+1][1]); //returns reference error 1069   
    }

}
}

関数の外で変数を宣言することにこだわっていますか?

いいえ、多次元配列は私が必要としているものには機能しません。提供されたコードスニペット内のすべてを解決するように見えますが、え?

私の意図は、使用するクラスを介して配列を渡し、使用する配列の束を変更することです。多次元配列を使用すると、大量のコピーが発生するため効率が悪くなります。

4

3 に答える 3

2

あなたのエラーは、変数のスコープを間違えたためです。
「this」キーワードは、クラスの特定のインスタンスで変数をターゲットにしようとしていることを意味します。
変数のスコープを関数にローカルに設定しました。
「this」を機能させるには、それらをクラス宣言領域に移動する必要があります。

package 
  {

  public class main extends MovieClip
  {
         public var array1:Array = [1,2];
         public var array2:Array = [3,4];
      public function main():void
      {
          trace(this["array"+1][1]); //returns reference error 1069   
      }

  }
}




// now if you meant to scope them locally to the function then you can not use "this"
// you have to assign them to an object or an array 

package 
  {

  public class main extends MovieClip
  {
      public function main():void
      {
          var obj:Object = {}
              obj['array1'] = new Array( [1,2] )
              obj['array2'] = new Array( [3,4] )
          trace(obj["array"+1][1]);
      }
  }
}

これはテストされていないコードですが、正しい方向に進むはずです。

于 2012-06-04T02:39:54.783 に答える
2

がプロパティにアクセスするにはthis[]、それらのプロパティが に属している必要がありますthis。サンプルでは、​​プロパティは定義された関数に属し、そのスコープ外ではアクセスできません。

まず最初に; はい、コードを機能させるには、もちろん、クラス レベルのスコープでプロパティを定義する必要があります。

しかし、もっと重要なことは、あなたがやろうとしていることをよく見て、それが良いアプローチであるかどうかを判断することです.私の賭けは、そうではないということです. 保存したいすべてのデータを処理する分離されたクラスを検討することをお勧めします。

于 2012-06-04T02:26:20.357 に答える
0

正確に達成しようとしていることに応じて、次のように配列を引数として関数に渡すことも検討できます。

function main():void
{
    var array1:Array = [1,2];
    var array2:Array = [3,4];
    doSomethingWithArray(array2);
}
main();

function doSomethingWithArray(arr:Array):void
{
    trace(arr[1]); //Traces the value of array2[1], which = 4
}

var currentArray:Arrayまた、必要に応じて任意の配列として設定し、必要に応じて参照できる を用意することも検討してください。

public class main extends MovieClip
{

    ...
    public var currentArray:Array;

    function main():void
    {
        var array1:Array = [1,2];
        currentArray = array1;
        doSomethingithCurrentArray();

        var array2:Array = [3,4];
        currentArray = array2;
        doSomethingithCurrentArray();

        currentArray = null;
    }

    public function doSomethingithCurrentArray():void {
       if(currentArray != null){
          trace(currentArray);
       }
    }

}
于 2012-06-04T02:40:04.127 に答える