如何在Lua 5.1 LGS中编写可随时终止的函数序列执行脚本?
解决LGS宏脚本可随时终止的顺序执行问题
你当前代码的核心问题是:定义Script表时直接执行了所有函数,把执行结果存入了表,而非存储可延迟执行的函数对象;同时Lua语法使用有误(比如&&、Length()方法)。以下是修正后的实现:
修正后的完整代码
-- 原有自定义函数部分(保持不变) TextEditor = {39393, 739937} SomeString = "A very long novel" WriteString = function(str) -- 写入文本编辑器的逻辑 end OtherFunction = function(arg1, arg2) -- 自定义逻辑 end AnotherFunction = function(arg1, arg2, arg3) -- 自定义逻辑 end ReadSomething = function() -- 自定义逻辑 end
-- 修正后的执行控制部分 Script = { function() MoveMouseTo(TextEditor) end, function() WriteString(SomeString) end, function() OtherFunction(arg1, arg2) end, function() AnotherFunction(arg1, arg2, arg3) end, function() ReadSomething() end } local f = 1 -- Lua中逻辑与用and,表长度用#获取 while IsKeyLockOn("scrolllock") and f <= #Script do -- 执行当前步骤的函数 Script[f]() f = f + 1 end
关键修改说明
- 延迟执行函数:把每个函数调用包装成匿名函数存入
Script表,这样定义表时不会立刻执行函数,只有在循环中调用Script[f]()时才会执行对应步骤。 - 修正Lua语法:替换
&&为Lua标准的and,用#Script获取表的长度(Lua没有Length()方法)。 - 修正函数名:将原代码中的
ReadSomeString()改为ReadSomething(),与之前定义的函数名保持一致。
这样修改后,脚本会按顺序执行每个步骤,且只要关闭ScrollLock就能立即终止循环,不会执行后续步骤。
内容的提问来源于stack exchange,提问作者Silver_Wolf
相关产品推荐
相关产品推荐

