Как перегрузить оператор строки Lua? - PullRequest
3 голосов
/ 16 апреля 2011

Это:

debug.getmetatable("").__index = function (s, i) return s:sub(i, i) end

и это:

debug.getmetatable("").__index = _proc_lua_read

не работает.

1 Ответ

5 голосов
/ 16 апреля 2011

Попробуйте

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 вместо:

getmetatable("").__call = string.sub
...