为什么这个函数在Lua中没有返回任何内容时一起添加表的内容

时间:2017-04-14 17:58:54

标签: lua sum lua-table

我试图让一个表(所有整数)的争论加在一起形成一个总和。我正在开展一个最终目标是百分比的项目。我把各种数量和存储在一个表中。我想在表中一起添加所有这些整数以获得总和。我无法在标准库中找到任何内容,所以我一直在使用它:

function sum(t)
local sum = 0
for k,v in pairs(t) do
    sum = sum + v
end

return sum

然而,在退货之后它没有给我任何东西....任何和所有的帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

减少表内容(在这种情况下通过对元素求和)这个问题的更通用的解决方案是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())。