有没有办法让 ModuleScript 以与常规代码相同的方式运行?

所以我想把一个模块写进另一个脚本中,通过使用这一行将环境设置为线程级别,是否可以实现 local __={};setmetatable(__,{__index=_G});setfenv(0,__); 是否可行?或者我完全误解了 setfenv。

点赞
用户88888888
用户88888888

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

例如,如果你这样做

setfenv(0, {});

你将无法使用许多内置函数,包括'setfenv、print、warn、error'等等。

但是,如果在作为参数的sefenv表中,你放了一个空表而不是做些什么

setfenv(0, {["print"] = print, ["kek"] = function() print("hi") end});--我们可以在环境设置之前在表中定义'print'为'print',因为我们在定义之前定义了东西。

然后,如果你这样做了

kek();

你的控制台将是:

script: 'hi'

遵循这个逻辑,是的,你可以将脚本的环境设置为ModuleScript的环境来使用它的函数,但这样做会更容易,我认为更有效的方法是

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

无论如何,两种方法都是正确的,但第二种方法可能更容易。希望我的答案有所帮助!

2018-11-11 04:13:25