每次创建不同类的新对象时都会被覆盖



我对OOP还是个新手,但我不知道我在这里做错了什么。

-- TestModule
testClass = {}
local thingClassModule = require(script["ThingModule"])
function testClass:new()
setmetatable({}, self)
self.__index  = self
self.Thing    = thingClassModule:new(10, 15)
self.Thing2   = thingClassModule:new(30, 70)
end
return testClass

thing类模块:

-- ThingModule
thing = {}
function thing:new(a, b)
local obj = {}
setmetatable(obj, self)
self.__index = self
self.A = a or 0
self.B = b or 0
return obj
end
return thing

问题是Thing会被Thing2覆盖。

我相信你的问题不是将self分配给对象的元表,而是将其分配给模块,因此它正在覆盖数据而不是创建新对象。

这是一个你想要达到的目标的工作示例:

-- Thing Class
local Thing = {}
Thing.__index = Thing
function Thing.new(a, b)
local self = {}
setmetatable(self, Thing)

self.A = a
self.B = b

return self
end
return Thing
local Thing = require(script.Parent.Thing)
local TestClass = {}
TestClass.__index = TestClass
function TestClass.new()
local self = {}
setmetatable(self, TestClass)

self.Thing = Thing.new(10, 15)
self.Thing2 = Thing.new(30, 70)

return self
end
return TestClass

你可以通过这篇很棒的文章了解更多关于面向对象的知识:https://devforum.roblox.com/t/all-about-object-oriented-programming/8585

在方法中,self是方法调用中冒号之前的内容。在thing.new中,您创建了一个名为obj的新表,但随后在self中分配AB,这是thing表(或thingClassModule;它们都是同一张桌子)。在testClass.new中,您设置了新表的元表,但没有将其存储到变量中。然后继续修改self,即testClass

相关内容

  • 没有找到相关文章

最新更新