Lua编译报错'<name>' expected near '(' 如何修复对应函数语法问题
错误原因
报错<name> expected near '('是Lua语法限制导致的:Lua解析器遇到行首的function关键字时,会默认认为你要定义一个命名的全局函数,因此要求你紧跟函数名,不支持直接写匿名函数并立即调用。
你贴的是反编译生成的Lua代码,除了语法错误外,原代码里的uv0、uv1都是反编译生成的标识,实际运行也会报变量未定义的错误,需要同步修正递归引用逻辑。
修复方案
方案1:用括号包裹匿名函数(立即调用表达式写法)
用括号把整个匿名函数包裹,告诉Lua解析器这是一个函数表达式而非函数声明,同时把函数自身作为参数传入解决递归引用问题:
slot1 = { SetNodeCategory = function (slot0, slot1) (function (slot2, handler) slot2:setCategory(slot1) for slot4 in iterate_children(slot2) do handler(slot4, handler) end end)(slot0, debug.getinfo(1, 'f').func) end }
方案2:先声明局部变量存储递归函数(可读性更高,更推荐)
把反编译生成的无意义变量名替换为可读名称,逻辑清晰不易出错:
slot1 = { SetNodeCategory = function (node, targetCategory) local setCategoryRecursive setCategoryRecursive = function(currentNode) currentNode:setCategory(targetCategory) for childNode in iterate_children(currentNode) do setCategoryRecursive(childNode) end end setCategoryRecursive(node) end }
内容的提问来源于stack exchange,提问作者DefKorns
相关产品推荐
相关产品推荐

