Love2D开发如何实现Lua方法链式调用 测试代码崩溃该怎么解决
问题原因
你的代码崩溃的核心原因是不符合Lua默认的链式调用规则:Test:returnNumber5()返回的是数值5,而非Test表本身,你尝试对数值类型调用add5()方法,触发了类型错误。
底层逻辑说明
- Lua中用
:定义的方法会自动接收self(调用方法的表本身)作为第一个入参,function Test:add5(num)等价于function Test.add5(self, num) - 链式调用的前提是每个方法调用后都返回表实例本身,才能继续调用表上的其他方法
- 你之前做模组开发时能正常使用,大概率是对应模组环境预先修改了
number基础类型的元表,给数值类型添加了对应的操作方法,而Love2D默认环境没有做这个配置,所以直接崩溃
正确实现示例
要实现你需要的Test:returnNumber5():add5():add5():add5()链式调用效果,修改代码如下:
Test = { -- 用表属性存储要操作的数值 value = 0 } -- 初始化数值为5,返回自身支持链式调用 function Test:returnNumber5() self.value = 5 return self end -- 数值加5,返回自身 function Test:add5() self.value = self.value + 5 return self end -- 最终取值方法,获取计算后的数值 function Test:getResult() return self.value end function randumFunction() -- 链式调用后调用getResult拿最终结果 local num = Test:returnNumber5():add5():getResult() if num == 10 then print(num) end end
如果需要连续多次加5,写法如下:
-- 多次链式调用后结果为5+5+5+5=20 local result = Test:returnNumber5():add5():add5():add5():getResult()
内容的提问来源于stack exchange,提问作者spacepup90
相关产品推荐
相关产品推荐

