Lua学习笔记(8): 元表

元表
Lua中提供了元表(Metatable),其实这个元表就比较像面向对象中的类了,可以通过给某些特殊的标识符赋值达到重载的效果,这些特殊的标识符有:

名称 功能
__index 元表的索引方法
__newindex 新分配元素的下标
__add 重载 ‘+’
__sub 重载 ‘-’
__mul 重载 ‘*’
__div 重载 ‘/’
__mod 重载 ‘%’
__unm 重载 ‘-’ (一元运算)
__concat 重载 ‘…’
__eq 重载 ‘==’
__lt 重载 ‘<’ 或 ‘>’
__le 重载 ‘<=’ 或 ‘>=’

元表的创建方法

m_metatable = {}
m_table = {}
setmetatable(m_table, m_metatable)   --将m_metatable设置为m_table的元表
getmetatable(m_table)	--获得m_table的元表

关于__index的用法:

	m_metatable = {key1 = "hahahahah"} 
	m_table = {key2="2333"}
	setmetatable(m_table, m_metatable)
	setmetatable(m_table, {__index = getmetatable(m)table})
	print(m_table.key1)
	print(m_table.key2)

这段代码输出
hahahahah
2333
这是因为在使用索引访问表的时候,先去找这个索引是否存在于这个表里,如果没有再访问__index并把索引值传入,间接访问元表,所以数据如果放在元表里的话,表的键值不要和元表的键值重名

对元表的认识还不够清晰,待更

猜你喜欢

转载自blog.csdn.net/haowenlai2008/article/details/82750262