Есть ли способ заставить ModuleScript работать так же, как обычный код? - PullRequest
0 голосов
/ 07 ноября 2018

Итак, я хочу написать модуль в другой скрипт, возможно ли это сделать, установив среду на уровень потока, используя эту строку local __={};setmetatable(__,{__index=_G});setfenv(0,__); это вообще возможно? Или я сильно неправильно понял setfenv.

1 Ответ

0 голосов
/ 11 ноября 2018

Установка среды в основном изменит текущие определения большинства глобальных переменных.

Например, если вы сделали

setfenv(0, {});

Вы не сможете использовать множество встроенных функций, включая «setfenv, print, warn, error и т. Д. И т. Д. И т. П.».

Хотя, если в таблицу, которая нужна sefenv в качестве аргумента, вместо пустой таблицы вы добавляете что-то вроде

setfenv(0, {["print"] = print, ["kek"] = function() print("hi") end}); -- We can define 'print' to 'print' here because we are defining things in the table before the environment is set.

А потом, если вы сделали

kek();

Ваша консоль будет:

script: 'hi'

Следуя этой логике, да, вы сможете настроить среду вашего скрипта на среду ModuleScript, чтобы использовать его функции, но было бы проще, и я думаю, что более эффективно просто сделать

api = require(module);
api.kek();

В любом случае, оба они верны, но второй может быть проще. Надеюсь, мой ответ поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...