转载的文章,COCOS2D-X LUA面向对象编程里面,数据是初始化了之后传入类中,类负责提供一些计算的方法,而一些类,可能是有固定的数据格式,在创建类的时候不用传入数据,只是向外提供修改这些数据的接口,和一些数据计算方法,而且子类在继承了父类的数据之后,自己可能还要有些独有的数据需要初始化,那么可以考虑把每个类的数据的初始化单独拿出来处理,这样数据的初始化就不用通过类外面生成表,再传参实现,而是有一种良好的结构了。代码如下:
Base = {}
function Base:New()
local o = {}
setmetatable(o,self)
self.__index = self
o:Init()-->"Base:Init()"
return o
end
function Base:Init()
self.mX = 0
self.mY = {y=1}
print("Base:Init()")
end
function Base:SetX(x)
self.mX = x
end
function Base:GetX()
return self.mX
end
function Base:SetY(y)
self.mY.y = y
end
function Base:GetY()
return self.mY.y
end
Child = Base:New()--> Base:Init()
function Child:New()
local o = {}
setmetatable(o,self)
self.__index = self
o:Init()
return o
end
function Child:Init()
local parent = getmetatable(Child)
parent.__index.Init(self)--对元表元方法不是特别理解的同学,可以看我转载的文章 COCOS2D-X LUA 面向对象编程
self.mW = 100
print("Child:Init()")
end
function Child:SetW(w)
self.mW = w
end
function Child:GetW()
return self.mW
end
function main()
local wu = Child:New()-->Base:Init() Child:Init()
wu:SetW(200)
print(wu:GetW())-->200
wu:SetX(44)
print(wu:GetX())-->44
end
main()
都带有简单的注释,简单的两个类,把数据初始化分离开来,在子类生成的时候,也从父类继承数据下来,如果要修改,提供接口出来就行。
输出结果是:
>lua -e "io.stdout:setvbuf 'no'" "class.lua"
Base:Init()
Base:Init()
Child:Init()
200
44
>Exit code: 0