Lua在表格中没有超过'nil'

VeL*_*err 1 arrays lua

我有这样一个匿名的Lua函数:

an_func = function(x) return x == nil end
Run Code Online (Sandbox Code Playgroud)

我需要在4个值的表格上测试它:{'None', nil, 1, '1'}.所以,我写了以下代码:

for num, element in pairs({'None', nil, 1, '1'}) do
    print(num .. ': ' .. tostring(an_func(element)))
end
Run Code Online (Sandbox Code Playgroud)

当我运行它时,我只有三行:

1: false
3: false
4: false
Run Code Online (Sandbox Code Playgroud)

具有true值的行(对应于nil表元素)未打印.

你能解释一下,为什么Lua打印所有结果,但是true?如何修复剪切使其输出所有4行?

PS我是Lua的新人.

小智 5

当使用pairs()时,它会遍历表的所有元素.意味着什么,所以不会去在它.它为什么要告诉你桌上什么都没有?如果你有一个全新的表,如果你用任何东西索引它,它将返回nil. print(({}).test) --> nil

如果你真的想得到零,你可以使用虚拟值:

local NIL = setmetatable({},{__tostring=function() return "nil" end})

an_func = function(x) return x == NIL end

for num, element in pairs({'None', NIL, 1, '1'}) do
    print(num .. ': ' .. tostring(an_func(element)))
end
Run Code Online (Sandbox Code Playgroud)

输出:

1: false
2: true
3: false
4: false
Run Code Online (Sandbox Code Playgroud)

  • @VeLKert实际上他做了一个名为NIL的表,当tostring'd返回'nil'时 (2认同)