0

4 つの文字列で構成される SaveData というカスタム クラスがあります。loadEntries と呼ばれる SaveData の配列があり、それぞれを反復処理して文字列にアクセスし、それらを別のものと比較したいと考えています。ここ数日、unityscript のクロージャについて多くのことを読みましたが (ここには明らかに多くのコンテンツがあります)、これを処理する方法が見つかりませんでした。ほとんどの例は、各エントリの値を出力することだけを扱っているようで、私の目的には適していません。これは私がこれまでに持っていたもので、コンパイルされません(なぜコンパイルされないのか理解していますが、それを機能させる方法がわかりません):

function Update() {
  for (var entry : SaveData in loadEntries) {
    entry = extractData(entry);

    //logic with "entry" members
  }
}

function extractData(entry : SaveData) {
  return function(entry : SaveData) { var myEntry = entry; };
}

エントリ全体ではなく、SaveData の各メンバーでクロージャーを使用する必要がありますか? この方法は可能ですか?

4

2 に答える 2

0

コードの基本的なテンプレートは次のとおりです。

  // Create your class like this
  function SaveData(x1, x2, x3, x4) {

    this.string1 = x1; // Whatever value you need
    this.string2 = x2; // Whatever value you need 
    this.string3 = x3; // Whatever value you need
    this.string4 = x4; // Whatever value you need

  }

  // Now let us construct objects from SaveData class and insert them in array.
  var loadEntries = [];

  var firstInstance = new SaveData("a1", "a2", "a3", "a4");
  loadEntries.push(firstInstance);

  // we can directly push more objects without creating variables like this:
 loadEntries.push(new SaveData("b1", "b2", "b3", "b4"));
 loadEntries.push(new SaveData("c1", "c2", "c3", "c4"));
 loadEntries.push(new SaveData("d1", "d2", "d3", "d4"));

  // Access like this in update function
  var myGlobalVar = "d1";
  for (var i = 0; i < loadEntries.length; i++) {

    var saveDataInstance = loadEntries[i];

    // let us log the instance on console to see it is correct
    console.log(JSON.stringify(saveDataInstance));

    if (saveDataInstance.string1 === myGlobalVar) {
       console.log("Found the instance we were looking for");

       // Other strings are 
       // saveDataInstance.string2
       // saveDataInstance.string3
       // saveDataInstance.string4
    }
  }

この場合、閉鎖の必要はないと思います。

ここで動作するデモを参照してください: http://jsbin.com/utezuq/1/watch

于 2012-12-18T18:51:14.670 に答える
0

詳細な回答を締めくくったおかげで、スコープに問題がなかったという点で彼は正しかったです。しかし、この問題に戻ってきて、カスタム クラス「SaveData」が静的に宣言された文字列で構成されているために発生したことがわかりました。それらは静的であるため、最終結果のみが保存されていました。誰かが私と同じ間違いをした場合に備えて、質問はそのままにしておきます。

于 2013-01-14T15:55:40.117 に答える