Это:
debug.getmetatable("").__index = function (s, i) return s:sub(i, i) end
и это:
debug.getmetatable("").__index = _proc_lua_read
не работает.
Попробуйте
debug.getmetatable("").__index = function (s, i) return string.sub(s,i,i) end
Обратите внимание, что переопределив таким образом __index для строк, вы потеряете возможность вызывать методы для строк: обратите внимание, что код не вызывает s:sub. Для лучшего решения, которое этого не делает, смотрите http://lua -users.org / lists / lua-l / 2007-11 / msg00619.html . Или установите __call вместо:
__index
s:sub
__call
getmetatable("").__call = string.sub