Module:Abilities/utils: Difference between revisionsGive feedback
m testing a generic table accessor function |
m get_value() adjusted to search number keys first as a string key and then as an integer index |
||
| Line 98: | Line 98: | ||
-- Generic function to traverse the table | -- Generic function to traverse the table | ||
-- A parameter can be passed that is numerical, like 2; and the function will | |||
-- first try to access the key "2", otherwise it will look for the value at index=2 (3rd value) | |||
function p.get_value(frame) | function p.get_value(frame) | ||
local args = frame.args | local args = frame.args | ||
local value = | local value = item_data | ||
for i = 1, #args do | for i = 1, #args do | ||
local key = args[i] | local key = args[i] | ||
if type(value) == "table" then | -- First try string key | ||
if type(value) == "table" and value[key] ~= nil then | |||
value = value[key] | value = value[key] | ||
-- Then try numeric key if string didn't work | |||
elseif type(value) == "table" then | |||
local num_key = tonumber(key) | |||
if num_key and value[num_key] ~= nil then | |||
value = value[num_key] | |||
else | |||
return "" | |||
end | |||
else | else | ||
return " | return "" | ||
end | end | ||
end | |||
-- Return final value, convert to string if not nil | |||
if value == nil then | |||
return "" | |||
else | |||
return tostring(value) | |||
end | end | ||
end | end | ||
return p | return p | ||