Lua全局变量通信:Computer Craft库存系统跨文件数据传递方案
Computer Craft 库存系统优化实现方案
问题场景
我在Computer Craft中开发库存系统,现有文件结构:
- 根目录下的
inv.lua(主控脚本) chestAPI目录下的inv_scan.lua:负责扫描所有库存,将数据存入二维数组,扫描操作耗时较长chestAPI目录下的inv_list.lua:读取扫描数据并输出至显示器
核心需求:
- 仅在开机或点击显示器刷新按钮时执行一次扫描,避免重复扫描浪费性能
- 主控脚本
inv.lua调用扫描脚本获取数据,用户需要显示物品时,将数据传递给inv_list.lua输出 - 拒绝单文件实现,避免代码结构混乱
此前尝试用 require() 时,会导致 inv_list.lua 每次触发扫描,无法达到优化效果。
可行解决方案
通过编写最小示例验证了可行方案,具体代码如下:
scan.lua(对应原 inv_scan.lua)
-- 模拟耗时的库存扫描逻辑 function scan() data1 = 1 + 1 data2 = 4/2 return data1, data2 end
print.lua(对应原 inv_list.lua)
-- 负责将数据输出到显示器 function print(data1, data2) print(data1) print(data2) end
main.lua(对应原 inv.lua)
local scanner = require("scan.lua") local printer = require("print.lua") -- 按需执行扫描:仅在开机/刷新触发时调用一次 data1, data2 = scanner.scan() -- 监听用户输入,按需触发数据输出 while true do input = read() if input == "print" then printer.print(data1, data2) end end
该方案达成的效果:
- 扫描操作仅在主动调用
scanner.scan()时执行,彻底避免重复耗时扫描 - 扫描数据由主控脚本统一持有,需要显示时传递给输出脚本处理
- 代码拆分清晰,保持模块化结构,便于后续扩展存取物品功能
内容的提问来源于stack exchange,提问作者Nola
相关产品推荐
相关产品推荐

