【问题标题】:Is there any way to make a ModuleScript run the same as regular code?有什么方法可以让 ModuleScript 像常规代码一样运行?
【发布时间】:2018-11-11 12:13:25
【问题描述】:

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

【问题讨论】:

    标签: module lua roblox


    【解决方案1】:

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

    例如,如果你这样做了

    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();
    

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

    【讨论】:

      猜你喜欢
      • 2020-06-09
      • 2014-08-02
      • 1970-01-01
      • 2021-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-06
      • 1970-01-01
      相关资源
      最近更新 更多