0

我有一个名为 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 回答