Lua中是否有Python的defaultdict功能

Mar*_*mro 3 python lua defaultdict

Lua中是否有类似于collections.defaultdictPython中的功能,它可以自动处理不存在的关联数组键的默认值?

我希望下面的代码设置nilv而不是错误.所以基本上默认情况下a[2](不存在的键)是一种方法table:

a = {}
v = a[2][3] 

>>> PANIC: unprotected error in call to Lua API (main.lua:603: attempt to index field '?' (a nil value))
Run Code Online (Sandbox Code Playgroud)

在Python中,它可以这样做:

>>> import collections
>>> a = collections.defaultdict(dict)
>>> print a[2]
{}
Run Code Online (Sandbox Code Playgroud)

Nic*_*las 5

有Lua标准功能吗?不,但你可以用metatables轻松完成.您甚至可以编写一个函数来创建这样的表:

function CreateTableWithDefaultElement(default)
  local tbl = {}
  local mtbl = {}
  mtbl.__index = function(tbl, key)
    local val = rawget(tbl, key)
    return val or default
  end
  setmetatable(tbl, mtbl)
  return tbl
end
Run Code Online (Sandbox Code Playgroud)

请注意,每个元素都将获得相同的默认值.因此,如果将默认值设为表,则返回表中的每个"empty"元素将有效地引用同一个表.如果这不是你想要的,你将不得不修改这个功能.