S
А почему так? А не склеить ли их все в один файл с кучей функций?
Size: a a a
S
S
local lib = setmetatable({}, {__index = function(self, k) require(k); self[k] = _G[k]; return self[k] end})Но это всё равно не очень хорошо имхо.
lib.M622("Y30Z10")
KA
KA
S
S
S
function loadmodule(name)
1. Ищем файл со скриптом по package.path
2. Ищем префиксные штуки
3. Добавляем в начало текста скрипта локальную табличку, сгружаем в неё префиксные штуки
4. Заменяем имена префиксных штук в функции модуля на табличные, чтобы не пересекалась с другими
5. Саму функцию тоже пихаем в табличку
6. Ретурним из модуля табличку и кешируем где-нибудь
end
Скрипты — это текст, и с ними можно работать как с текстом, даже на лету. И будет совершенно пофигу на порядок, нормальные, изолированные друг от друга модули, не какающие в глобальное пространство.KA
KA
S
_G
. Всё что объявлено без local
(т.е. глобальное) — направляется туда._G
, в которой хранится всё глобальное.S
S
local currentstate = "const"
local funcname = ""
local pattern = "[a-zA-Z0-9_]+"
for line in io.lines(arg[1]) do
if currentstate == "const" then
if line:find(pattern .. "%s+=") then
io.write("local " .. line .. "\n")
end
end
if currentstate == "func" then
io.write(line .. "\n")
end
if line:find("^function") then
currentstate = "func"
funcname = line:match("function (" .. pattern .. ")")
io.write("local " .. line .. "\n")
end
end
io.write("return " .. funcname)
S
lua %~dp0/fixer.lua %1 > %1.fixed 2>&1
Пихаешь его в ту же папку что и скрипт (обзови скрипт fixer.lua):KA
S
A
load
можно указать конкретную таблицу окружения, то что будет вместо _G
. То есть, всё что подгружаемая фигня будет объявлять глобально, будет записываться в указанную тобой таблицу. Ну и сама подгружаемая фигня сможет использовать только указанные в той таблице функции, то есть никаких math/io/gg/load/require по умолчанию там нет. Если ты добавишь — будет.A
S
local env = setmetatable({}, {__index = _G})
A
S
env
, т.е. environment.