如何在Squirrel中使用函数

  • 本文关键字:函数 Squirrel squirrel
  • 更新时间 :
  • 英文 :


我在我的松鼠代码中调用一个简单的函数,但这似乎没有像预期的那样工作。调用带参数的函数不会影响原始变量。'counter1'保持不变的值。在javascript中这是可以工作的,那么为什么在Squirrel中不能工作呢?

// declare test variable
counter1 <- 100;
function impLoop() {
  // function call to update these variables - this is not working!
  changeValue(counter1);
  // this just displays the original value: 100
  server.log("counter 1 is now " + counter1);
  // schedule the loop to run again (this is an imp function)
  imp.wakeup(1, impLoop);
}
function changeValue(val1){
    val1 = val1+25;
    // this displays 125, but the variable 'counter1' is not updated?
    server.log("val1 is now " + val1);
}

在squirel库中,整型和浮点型参数总是按值传递。所以当你修改函数changeValue中的val1时,你实际上修改了用counter1变量的副本初始化的函数的一个形式参数,不影响val1。Javascript代码也会以同样的方式运行。

要影响counter1的值,可以使用显式赋值:

function changeValue(val1){
   val1 = val1+25;
   return val1;
}
...
counter1 = changeValue(counter1);

或传递counter1作为表的槽:

table <- {};
table.counter1 <- 100;
function changeValue(t){
    t.counter1 = t.counter1 + 25;
}
for (local i=0; i<10; i++) {
   changeValue(container);
   server.log("counter 1 is now " + container.counter1);
}

相关内容

  • 没有找到相关文章

最新更新