减少表格内容(在这种情况下通过对元素进行求和)的一个更通用的解决方案是outlined in this answer(警告:代码草图中没有类型检查)。
如果你的函数根本没有返回,那很可能是因为你在函数定义中缺少了一条end
声明。
如果你的函数返回零,那么你传递的参数可能会有问题。换句话说,参数t
可能是nil
或空表。在这种情况下,该函数将返回零,即您的local sum
初始化的值。
如果您在循环中添加print (k,v)
进行调试,您可以确定函数是否有要添加的内容。所以我会尝试:
local function sum (t) do
print("t", t) -- for debugging: should not be nil
local s = 0
for k,v in pairs(t) do
print(k,v) --for debugging
s = s + v
end
return s
end
local myTestData = { 1, 2, 4, 9 }
print(sum(myTestData))
这段代码运行时的预期结果是
t table: [some index]
1 1
2 2
3 4
4 9
16
请注意,我已经改变了变量名称的功能,从内到sum
s
。最好不要使用函数名称sum
作为保存函数定义中的和的变量。函数中的local sum
覆盖全局函数,因此,例如,您无法递归调用sum()
(即在sum()
的定义中调用sum()
)。
'return'后缺少'结束'(关闭函数定义)。 – GoojajiGreg