スクリプト内に「疑似 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)