AutoIT技术疑问:为何调用函数无法向数组插入元素?
问题解决:AutoIt数组参数修改不生效的原因及修复
核心原因
AutoIt中数组默认按值传递参数,Bar函数里操作的是原数组$Baz的副本,修改只会作用在副本上,不会影响外部的原数组。
修复方案
方法一:在函数参数声明时用ByRef指定引用传递
修改Bar函数的参数定义,添加ByRef关键字,让函数直接操作原数组的内存地址:
Func Foo () Local $Baz[100] = [] Call("Bar", $Baz) MsgBox(0, "", $Baz[0]) Return EndFunc Func Bar (ByRef $_Array) $_Array[0] = 1 Return EndFunc
方法二:调用Call时指定ByRef传递参数
如果不想修改函数定义,也可以在调用Call时给参数加上ByRef:
Func Foo () Local $Baz[100] = [] Call("Bar", ByRef $Baz) MsgBox(0, "", $Baz[0]) Return EndFunc Func Bar ($_Array) $_Array[0] = 1 Return EndFunc
补充说明
ByRef的作用是让参数按引用传递,函数内部对参数的修改会直接同步到外部变量- 推荐使用方法一,因为函数声明明确标注了参数的传递方式,可读性更强
内容的提问来源于stack exchange,提问作者AutoIt
相关产品推荐
相关产品推荐

