我对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
中分配A
和B
,这是thing
表(或thingClassModule
;它们都是同一张桌子)。在testClass.new
中,您设置了新表的元表,但没有将其存储到变量中。然后继续修改self
,即testClass
。