我在脚本中设置了一个“psuedo-oop”系统,让我可以更好地与应用程序中的 UserData 进行交互。我的系统工作得非常好,只是它不传递引用,而是传递值。因此,如果我这样说:
World.Body.Parent=World.Body2
实际上什么都没有发生,因为它实际上从未将Body
s 父级设置为另一个主体。相反,它有点简化为:
World=World.Body2
(因为它是返回World
的父级Body
)。现在,如果我做这样的事情,另一方面:
print(World.Body.Parent.Type)
==>World
因为它正确地获得了World
对象(作为 的父级Body
)。
现在考虑到这一切,是否有某种方法可以确保它通过引用传递而不是实际发送对象?任何想法,将不胜感激!
这是我正在使用的相关源代码:
local target=_G
function AddService(service)
Blank=(function(...) return end)
CreateTemporaryIndex=(function(obj)
local env_meta={
__index=(function(this, key)
if obj[key]~=nil and obj[key]~=key then
if type(obj[key]) ~= "userdata" then
return obj[key]
else
local r,i=pcall(function() Blank(obj[key].Type) end)
if r then
return CreateTemporaryIndex(obj[key])
else
return (function(...) local arg={...} table.remove(arg,1) return obj[key](obj,unpack(arg)) end)
end
end
else
local ofObj=obj:Child(key)
if ofObj~=nil then
return CreateTemporaryIndex(ofObj)
end
end
return nil
end)
}
local nRe={}
setmetatable(nRe,env_meta)
return nRe
end)
target[service.Name]=CreateTemporaryIndex(service)
end
AddService(__Environment.World)
AddService(__Environment.Players)
AddService(__Environment.Lighting)
AddService(__Environment.Environment)