为什么这个函数在 Lua 中将表的内容加在一起,什么都不返回



我试图使表(所有整数)的连续性相加形成一个总和。我正在从事一个最终目标是百分比的项目。我把各种数量放在一个表格中。然后我想将表中的所有这些整数相加以获得总和。我在标准库中找不到任何东西,所以我一直在努力使用它:

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

但是,在返回金额后它没有给我任何东西......任何和所有的帮助将不胜感激。

本答案概述了减少表内容(在本例中通过对元素求和)的更通用的解决方案(警告:代码草图中没有类型检查)。

如果您的函数根本没有返回,则可能是因为函数定义中缺少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())。

相关内容

最新更新