2017-04-14 22 views
0

我被困在试图使表(所有整数)的表达式加在一起形成一个总和。我正在研究一个最终目标是百分比的项目。我将各种数量放在一张桌子上。然后,我想将表中所有这些整数加在一起得到一笔总和。我一直没能找到标准库什么,所以我一直tyring使用此:为什么这个函数在Lua中一起添加一个表的内容什么都不返回

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

return sum 

然而,它没有给我什么回报总和后....任何及所有的帮助将是不胜感激。

+3

'return'后缺少'结束'(关闭函数定义)。 – GoojajiGreg

回答

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 

请注意,我已经改变了变量名称的功能,从内到sums。最好不要使用函数名称sum作为保存函数定义中的和的变量。函数中的local sum覆盖全局函数,因此,例如,您无法递归调用sum()(即在sum()的定义中调用sum())。

相关问题