lua坚持写程序员

Lua base setmetatable()

2016-12-24  本文已影响368人  AlbertS
改变原始风光.jpg

前言

记得原来我们总结过一个查询元表的函数getmetatable(), 但是有查询必然会有设置,今天我们就一起来学习一下有关元表的设置的操作,以及设置元表时需要注意的相关问题,根据我的理解,Lua中模拟类以及类的继承关系也是通过元表的方式实现的,今后我们会继续深入学习。

内容


setmetatable


usage

-- 定义一个数字
local aNumber = 100

-- 定义一个普通的元表
local tab1 = { 
    x = 13,
    y = 36,
}

-- 设置数字的元表,将会如下错误,为了不影响下面运行,我们就注释掉了
-- 错误提示:bad argument #1 to 'setmetatable' (table expected, got number)
-- setmetatable(aNumber, tab1)

-- 没有元表时打印变量
print("\ntab1.z =", tab1.z)

-- 设置元表后打印变量
local m1 = { z = 36}
setmetatable(tab1, {__index = m1})
print("\ntab1.z =", tab1.z)

-- 设置元表为空后打印变量
setmetatable(tab1, nil)
print("\ntab1.z =", tab1.z)

-- 设置为有字段"__metatable"的元表
setmetatable(tab1, {__index = m1, __metatable = 'I have metatable'})
print("\ntab1.z =", tab1.z)

-- 再次设置元表会报错,因为原来的元表有'__metatable',起到保护作用
setmetatable(tab1, {__index = m1})
base_setmetatable.png

总结

上一篇下一篇

猜你喜欢

热点阅读