有谁能帮忙讲解一下这个 Roblox 代码是如何工作的?

我对这个 Roblox 插件有一个问题。它可以将模型转换为脚本。我的问题是它如何将脚本也转换了?如果我有一个带有脚本的模型,它会像在我放置它的模型中那样运行脚本。我们都知道 'scriptModel.Source' 只适用于插件,如果它将其转换为脚本,那个脚本不是插件脚本。只是一个普通的脚本。从我所了解的情况来看,这个函数是如何实现的:

function sandbox(var,func)
    local env = getfenv(func)
    local newenv = setmetatable({},{
        __index = function(self,k)
            if k=="script" then
                return var
            else
                return env[k]
            end
        end,
    })
    setfenv(func,newenv)
    return func
end

它似乎与环境有关。有人能帮我更好地理解吗?我想了解它是如何工作的,以及为什么能这么好地工作。

我所理解的只有,'var' 是一个脚本实例(Instance.new)。然后它获取函数的环境/作用域。当' script '被索引时,它返回那个 'var',否则它会返回函数环境变量。我理解的对吗?

谢谢! :D

点赞
用户2858170
用户2858170

这个函数将替换 func 的环境,使用一个旨在将非赋值索引传递到 var"script" 来实现。

这类似于 getfenv(func).script = var,唯一的区别在于您不会修改原始环境。

2021-04-06 07:11:03
用户15459779
用户15459779

变量说明:

var: 一个脚本或模型

func: 我不知道

操作步骤:

首先获取 func 的环境。然后创建一个带有以下属性的新环境:

  • 如果索引位置为空,则会触发 __index。然后,如果索引名称为 script,则返回脚本。否则,返回函数环境中 k 的索引位置。

接着将 func 的环境设置为新环境,然后将其返回。

2021-04-06 08:58:00