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

Lua通过变量访问table元素时报type、color参数为nil的问题

问题根因

Lua的table访问有两种语法,你误用了静态点访问语法来读取动态变量对应的键:

  • 点语法t.k:只会查找table中键名**固定为字面量"k"**的字段,不会解析k中存储的变量值
  • 方括号语法t[k]:会先计算括号内表达式/变量的实际值,再用这个值作为键名查找对应字段

你代码中写的Fixture.type.Colors.color、Show.Colors.color全部用了点语法,Lua不会使用你传入的type(实际值为"Beam")、color(实际值为"White")参数去查表,而是硬找Fixture下名为"type"的键、Colors表下名为"color"的键,这两个键在你定义的配置表中根本不存在,自然返回nil触发报错。
另外你代码里Fixture.Beam.loaded_color写死了Beam层级,和传入的type参数逻辑不统一,后续如果传入其他灯具类型参数会出现逻辑错误。

修复方案

将所有需要用变量值作为键名的访问位置,替换为方括号动态访问语法即可,修复后的完整函数代码如下:

function color(fixture_type, color_name)
    -- 建议将参数名改为更具语义的名称,避免和内置属性、全局变量重名产生歧义,不改名也可正常运行
    color_load = gma.user.getvar('COLOR_LOAD')
    if color_load == 'True' then
        -- 用方括号动态读取参数对应的表字段
        var("LOADED_BEAM_COLOR", Fixture[fixture_type].Colors[color_name])
        cmd("Copy Image 84 At " .. Show.loaded_color_empty .. " /o")
        cmd("Copy " .. Show.Colors[color_name] .. " At " .. Fixture[fixture_type].loaded_color)
    end
end

修复后调用color('Beam', 'White')时,会正确读取Fixture.Beam.Colors.White对应的值"98.101",不会再出现nil报错。

内容的提问来源于stack exchange,提问作者HarryBilney

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 14:06:30