我在我的松鼠代码中调用一个简单的函数,但这似乎没有像预期的那样工作。调用带参数的函数不会影响原始变量。'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);
}