Lua 类

用表实现类机制

例程1

CPerson= {name="default name", age= 10, sex = "fale"}

-- 构造方法
function CPerson.new(t,o)
	o = o or {}
	setmetatable(o, t)
	t.__index = t	-- 从一个表o中访问另外一个t表的元素,通过元表实现
	return o
end
-- 方法
function CPerson.Walk()
	print("walk");
end

function CPerson.Print(tb)
	print(tb.name, tb.age, tb.sex);
end

-- 创建一个空对象
local p = CPerson.new(CPerson)
p.Walk()

local p1 = CPerson.new(CPerson, {name = "lisi", age = 18})
p1.Print(p1)
运行结果
walk

lisi 18 fale

例程2 改进

CPerson= {name="default name", age= 10, sex = "fale"}

-- 构造方法
function CPerson:new(o)
	o = o or {}
	setmetatable(o, self)
	self.__index = self
	return o
end
-- 方法
function CPerson:Walk()
	print("walk");
end

function CPerson:Print()
	print(self.name, self.age, self.sex);
end

-- 创建一个空对象
local p = CPerson:new()	-- 把 CPerson 自动传入参数
p:Walk()

local p1 = CPerson:new({name = "lisi", age = 18})
p1:Print(p1)
运行结果
walk

lisi 18 fale

继承
CPerson= {name="default name", age= 10, sex = "fale"}

-- 构造方法
function CPerson:new(o)
	o = o or {}
	setmetatable(o, self)
	self.__index = self
	return o
end
-- 方法
function CPerson:Walk()
	print("walk");
end

function CPerson:Print()
	print(self.name, self.age, self.sex);
end

Stu = {}
function Stu:new(o)
	o = o or {}
	setmetatable(o, self)
	self.__index = self

	setmetatable(self, CPerson)	-- 继承 CPerson
	CPerson.__index = CPerson
	return o
end

local p = Stu:new() -- 等价于 Stu.new(Stu, nil)
p:Walk() --  Walk 在 Stu 表中没有,就会查找元表 CPerson
运行结果

walk

重写

CPerson= {name="default name", age= 10, sex = "fale"}

-- 构造方法
function CPerson:new(o)
	o = o or {}
	setmetatable(o, self)
	self.__index = self
	return o
end
-- 方法
function CPerson:Walk()
	print("walk");
end

function CPerson:Print()
	print(self.name, self.age, self.sex);
end

Stu = {}
function Stu:new(o)
	o = o or {}
	setmetatable(o, self)
	self.__index = self

	setmetatable(self, CPerson)	-- 继承 CPerson
	CPerson.__index = CPerson
	return o
end

function Stu:Walk()
	print("stu walk")
end

local p = Stu:new() -- 等价于 Stu.new(Stu, nil)
p:Walk() --  Walk 在 Stu 表中有,就不会去元表 CPerson 中查找
运行结果

stu walk

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/youshijian99/article/details/79969883
个人分类: Lua
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭