如何通过双引用动态创建全局对象并解决声明语法报错?
解决AutoHotkey动态创建全局命名对象的问题
问题代码
test() OutputDebug, % foo.baz test (){ bar := "foo" global %bar% := {} ; 目标对象名为foo %bar%.baz := "100" }
运行时触发报错:
==> This line does not contain a recognized action. Specifically: global %bar% := {}
需求说明:需要动态创建名称为变量值(如窗口句柄)的全局对象,确保其他函数可访问;移除global则对象仅在函数内部有效,Static关键字无法满足跨函数访问的需求。
解决方案
方法1:先声明全局变量,再赋值
test() OutputDebug, % foo.baz test (){ bar := "foo" global %bar% ; 先将变量bar对应的名称声明为全局变量 %bar% := {} ; 为该全局变量创建对象 %bar%.baz := "100" }
global %bar%会把bar变量中存储的名称对应的变量标记为全局,后续赋值操作就会直接作用于全局作用域的变量,对象自然能被其他函数访问。
方法2:直接操作全局命名空间(适用于AHK v1.1.27及以上版本)
test() OutputDebug, % foo.baz test (){ bar := "foo" Global.%bar% := {} ; 通过Global内置对象直接创建全局作用域的对象 Global.%bar%.baz := "100" }
这种方式无需单独声明全局变量,直接通过Global内置对象操作全局作用域,动态生成的对象会直接属于全局作用域,可被其他函数访问。
报错原因
AutoHotkey的global关键字仅支持声明变量为全局的语法,格式为global 变量名1, 变量名2...,不能在global后直接跟随赋值表达式,尤其是动态变量名的场景,因此原代码的写法不被识别。
内容的提问来源于stack exchange,提问作者Ralf_Reddings
相关产品推荐
相关产品推荐

