lua 面向对象使用

一直不知道lua 的metatable怎么用,偶然练习,发现还可以结合面向对象的概念一起用。分享最基础的代码如下:

-- filename "test.lua"

local t = {}
t.__index = t

function t:new(name, age)
	local obj = {
		__name = name,
		__age = age,
	}
	self.tab = {name = name, age = age}
	return setmetatable(obj, self)
end

function t:set(name, age)
	self.__name = name
	self.__age = age
end

function t:get(name)
	if self.__name == name then
		return self.__age
	end
end

function t:printf()
	print("name: "..self.__name)
	print("age: "..self.__age)
end
return t


test_meta.lua
local object1 = (require "test"):new("Chenk", 23)  		

local object2 = (require "test"):new("Qinly", 22)


object1:printf()            输出 name: Chenk age: 23
print("-----------------")
object2:printf() <span style="white-space:pre">	</span>    输出 name: Qinly age: 22


attention: 第一个文件: t.__index = t  必须要有,用metatable改变table的行为,让object1:printf() 和object2:printf() 得以找到要执行的函数。看到new返回的是obj,它本身并没有printf这个函数,将obj的metatable设为t后,它会去找t的相关函数,但是它不是直接去找,而是通过t.__index ,但是由于t.__index默认为nil。所以,没有t.__index = t,会报错。可以自行将其删掉试试。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值