如何在AutoHotkey中通过字符串形式获取类静态变量的值?
AutoHotkey中通过字符串参数获取类静态变量值的解决方案
问题场景
编写的expand_class_static.ahk脚本中,调用expand_var("myclass.svar")时触发运行时错误,无法通过字符串形式的类静态变量名获取对应值,而普通全局变量可以正常处理。
原脚本代码:
global gvar := 1 class myclass { static svar := 2 } expand_var(varname) { theval := %varname% MsgBox, % varname "=" theval } expand_var("gvar") ; 正常显示gvar=1 MsgBox, % "myclass.svar is: " . myclass.svar ; 正常显示2 expand_var("myclass.svar") ; 运行时错误
错误原因
AutoHotkey 1.1的传统变量展开语法%varname%仅能解析单一变量名,无法识别myclass.svar这种包含对象(类)属性访问的复合结构,会将其当作整体变量名查找,导致找不到对应变量而报错。
解决方法
修改expand_var函数,通过拆分字符串识别类名和静态变量名,再通过类对象的属性访问方式获取值;普通变量则保持原有逻辑。
修改后的完整脚本:
global gvar := 1 class myclass { static svar := 2 } expand_var(varname) { if InStr(varname, ".") { ; 拆分类名和静态变量名 parts := StrSplit(varname, ".") classObj := %parts[1]% theval := classObj[parts[2]] } else { ; 处理普通变量 theval := %varname% } MsgBox, % varname "=" theval } expand_var("gvar") ; 显示gvar=1 expand_var("myclass.svar") ; 正常显示myclass.svar=2
说明
- 利用
StrSplit将带点的字符串拆分为类名和静态变量名两部分 - 通过
%parts[1]%获取类对象(AutoHotkey中类本身是对象,静态成员存储在类对象的属性中) - 用
classObj[parts[2]]的方式访问类的静态变量,这是对象属性访问的通用语法
内容的提问来源于stack exchange,提问作者Jimm Chen
相关产品推荐
相关产品推荐

