antonn3312578859 2 Опубликовано: 23 октября, 2021 У меня есть такая программа, но мне надо что бы init.lua мог читать этот файл, а его дочерние процессы и программы, запущенные пользователем нет (возвращалось nil). как это сделать? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
HeroBrine1st 88 Опубликовано: 25 октября, 2021 Сохранить оригинальную функцию open из proxy в переменной `open`, затем заменить функцию в этом proxy на function(...) local args = {...} if args[1] == "file.lua" then -- Заменить название файла return nil else return open(...) -- В случае, если оригинальная функция сохранена в переменную open, иначе нужно изменить название end end (может быть ошибся с синтасисом, давно на lua не писал) Минусом данного решения является необходимость вызывать open из переменной внутри файла init.lua, а так же недоступность io.open, fs.open и подобных функций по отношению к конкретному файлу даже изнутри init.lua. Плюсом данного решения является потрясающая производительность по сравнению с debug.getinfo. Если данного решения будет недостаточно - нужно копать в сторону debug.getinfo. Найду Ocelot Desktop на своём ПК - попробую написать функцию с ним. К слову. Я не уверен, что component.proxy для одного компонента является единственным. Возможно, API предоставляет разные экземпляры, тогда нужно будет изменить функцию component.proxy, но это уже выглядит большим костылём. Расскажите, что вы хотите сделать; может быть, существует способ проще. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
HeroBrine1st 88 Опубликовано: 25 октября, 2021 (изменено) Похоже, что эта функция подходит. local function getCurrentScript() local info for runLevel = 0, math.huge do info = debug.getinfo(runLevel) if info then if info.what == "main" then return info.source:sub(2, -1) end else error("Failed to get debug info for runlevel " .. runLevel) end end end Она возвращает путь к файлу скрипта, выполняющемуся в данный момент. Нужно вызвать её и сравнить возвращаемое значение с `"/init.lua"`, если не совпадает - вернуть nil. Минус - низкая производительность (об этом написано прямо в документации на debug.getinfo). + как оказалось, поля в proxy можно создавать/изменять/удалять и они не будут пропадать. P.s. Цитата Расскажите, что вы хотите сделать; может быть, существует способ проще. Это остаётся в силе) Изменено 25 октября, 2021 пользователем HeroBrine1st + минус, + постскриптум Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
У меня есть такая программа, но мне надо что бы init.lua мог читать этот файл, а его дочерние процессы и программы, запущенные пользователем нет (возвращалось nil). как это сделать?
Поделиться сообщением
Ссылка на сообщение
Поделиться на других сайтах