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