unityscript关闭迭代自定义类

时间:2012-12-18 18:45:11

标签: for-loop unity3d closures unityscript

我有一个名为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的每个成员使用闭包而不是整个条目?这种方法甚至可能吗?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

感谢关闭了详细的答案,他是正确的,因为它没有任何范围问题。但是,我回到了这个问题,发现它出现了,因为我的自定义类“SaveData”由静态声明的字符串组成。由于它们是静态的,因此只保存了最终结果。如果有人犯了同样的错误,我会留下这个问题。