有什么方法可以使ModuleScript与常规代码一样运行?

时间:2018-11-07 16:55:30

标签: module lua roblox

所以我想将模块写入另一个脚本,是否可以通过使用此行将环境设置为线程级别来做到这一点 local __={};setmetatable(__,{__index=_G});setfenv(0,__);甚至可能吗?还是我严重误解了setfenv。

1 个答案:

答案 0 :(得分:1)

设置环境基本上会更改大多数全局变量的当前定义。

例如,如果您这样做

setfenv(0, {});

您将无法使用许多内置功能,包括“ setfenv,打印,警告,错误等”等。

但是,如果在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();

无论如何,两者都是正确的,但是第二个可能更容易。希望我的回答有帮助!