Is there a functionality in Lua similar to collections.defaultdict available in Python, which automatically handles default values for non-existent associative array keys?
I want the code below to set nil to v instead of an error. So basically a way to a[2] (non-existent key) be a table by default:
a = {}
v = a[2][3]
>>> PANIC: unprotected error in call to Lua API (main.lua:603: attempt to index field '?' (a nil value))
In Python it can be done like this:
>>> import collections
>>> a = collections.defaultdict(dict)
>>> print a[2]
{}
Is there a Lua standard function to do it? No. But you can do it easily enough with metatables. You can even write a function to create such tables:
Note that each element will get the same default value. So if you make the default value a table, each “empty” element in the returned table will effectively reference the same table. If that’s not what you want, you’ll have to modify the function.