rawget()

#!/usr/bin/env lua

mt = {}

mt.__index = function(t, idx)
  return "FOO"
end

t = { "foo", "bar", "baz" }
setmetatable(t, mt)

print(t[2])
print(t["x"])

print(rawget(t, 2))
print(rawget(t, "x"))

で、

bar
FOO
bar
nil

思っているのと違う動きなのだが…