为什么 Lua 中一个用于将表格内容相加的函数返回空值?

我正在尝试将一个包含整数的表格的所有内容相加为一个总和,但是无法实现。我正在开发一个目标为百分比的项目。我正在将各种数量放入并存储在一个表格中。我想要将表格中的所有整数相加以获取总和。我在标准库中找不到任何内容,因此我尝试使用以下代码:

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

return sum

然而,返回的结果为空值...非常感谢任何帮助。

点赞
用户3455883
用户3455883

这个问题减少表格内容的(在本例中为总和)的通用解决方案在这个答案中概述(警告:代码草图中没有类型检查)。

如果你的函数根本没有返回,那可能是因为你在函数定义中缺少了一个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()的定义中调用sum())。

2017-04-14 18:25:15