You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 14:15:10