有什么方法可以使 ModuleScript 运行 与常规代码相同?
Is there any way to make a ModuleScript run the same as regular code?
所以我想将一个模块写入另一个脚本,是否可以通过使用这一行将环境设置为线程级别来实现
local __={};setmetatable(__,{__index=_G});setfenv(0,__);
这可能吗?还是我严重误解了setfenv。
设置环境基本上会改变大多数全局变量的当前定义。
例如,如果您这样做了
setfenv(0, {});
您将无法使用很多内置函数,包括 'setfenv, print, warn, error, etc, etc, etc'。
不过,如果在 table 中 sefenv 需要作为参数,而不是放入一个空的 table,你可以放入类似
的东西
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();
无论如何,两个都是正确的,但第二个可能更容易。希望我的回答对您有所帮助!
所以我想将一个模块写入另一个脚本,是否可以通过使用这一行将环境设置为线程级别来实现
local __={};setmetatable(__,{__index=_G});setfenv(0,__);
这可能吗?还是我严重误解了setfenv。
设置环境基本上会改变大多数全局变量的当前定义。
例如,如果您这样做了
setfenv(0, {});
您将无法使用很多内置函数,包括 'setfenv, print, warn, error, etc, etc, etc'。
不过,如果在 table 中 sefenv 需要作为参数,而不是放入一个空的 table,你可以放入类似
的东西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();
无论如何,两个都是正确的,但第二个可能更容易。希望我的回答对您有所帮助!