LUA 表格与函数参数及传递空值

试图使用表格作为外部传入的用户生成数据的查找表。

tab = { ['on']  = function(x) x=x+1 return x end,
        ['off'] = function(x) x=x+2 return x end,
        ['high']= function(x) x=x+3 return x end,
        ['low'] = function(x) x=x+4 return x end
        }
do
   local var=0
   local userData='on'

   var = tab[userData](var)
   print(var)
   if var>0 then
      --这里可以执行某些操作
   else
   end

end

如果键值存在于表格中 (userData='on'),程序将按预期工作并打印

$lua main.lua
1

如果键值不存在于表格中 (userData='fluff'),程序将失败

$lua main.lua
lua: main.lua:11: attempt to call a nil value (field '?')
stack traceback:
main.lua:11: in main chunk
[C]: in ?

如果键值不存在,如何使用此类表格?

点赞
用户2858170
用户2858170

最佳解决方案是不让用户一开始就输入无效值。

如果您不能确定userData是否是tab中的键,则应在使用它作为tab的索引之前进行检查。

if not tab [userData] then
  print("无效用户数据")
  return
end

如果您需要将tab [userData]默认为一个函数,则可以执行以下操作:

tab [userData] = tab [userData] or function () print("I'm your default function!") end

或者像另一个答案中所示使用元表。

2021-01-28 08:22:41
用户8294610
用户8294610

你可以使用元表来处理不存在的键。

例如:

local tab = {}
setmetatable(tab, {__index = function()
    return function(x)
        return x + 1
    end
end})
print(tab['on'](1))

输出结果是: 2

2021-01-28 09:29:05