如何在Squirrel中使用函数?

时间:2014-06-06 10:45:05

标签: 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);
}

1 个答案:

答案 0 :(得分:5)

在Squirell bools中,整数和浮点参数始终按值传递。因此,当您在函数val1中修改changeValue时,实际上修改了使用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);
}