Вы также можете организовать это с помощью метатаблиц, полностью прозрачным способом:
mt={__newindex=function(t,k,v)
if type(k)~='string' then
error'this table only takes string keys'
else
rawset(t,k:lower(),v)
end
end,
__index=function(t,k)
if type(k)~='string' then
error'this table only takes string keys'
else
return rawget(t,k:lower())
end
end}
keywords=setmetatable({},mt)
for idx,word in pairs{"word","test","blah","here","code","woot"} do
keywords[word]=idx;
end
for idx,word in ipairs{"Foo","HERE",'WooT'} do
local res=keywords[word]
if res then
print(("%s at index %d in given array matches index %d in keywords"):format(word,idx,keywords[word] or 0))
else
print(word.." not found in keywords")
end
end
Таким образом, таблица может быть проиндексирована в любом случае. Если вы добавите в него новые слова, они автоматически будут также в нижнем регистре. Вы даже можете настроить его так, чтобы оно соответствовало шаблонам или как угодно.