Lua base getmetatable()

原始的风景.jpg

前言

今天来总结一个查询元表的函数,这个函数可以查询对象是否有元表,如果有还可以将元表返回,有了这个函数我们就可以查询某个对象的值到底是它本身很久拥有的,还是在原表中存在的,接下来我们就一起来看看这个函数的用法吧。

内容


getmetatable

  • getmetatable(object)
  • 解释:如果对象没有一个元表,则函数返回nil,否则函数会查询原表中是否有"__metatable"字段,如果有返回其关联值,如果没有则会返回所给对象的元表。

usage

  • 首先我们新建一个文件将文件命名为getmetatabletest.lua然后编写代码如下:
-- 查看没有元表的情况
local aNumber = 100
print("\nthe matetable of a number is", getmetatable(aNumber))


-- 普通的元表
local tab1 = { 
    x = 13,
    y = 36,
}
local m1 = { z = 36}
print("\nm1 is ", m1)

setmetatable(tab1, m1)
print("\nthe matetable of a table tab1 is", getmetatable(tab1))

-- 有字段"__metatable"的元表
local tab2 = { 
    x = 1,
    y = 3,
}
local m2 = {
    z = 28,
    ["__metatable"] = "hehe"
}
print("\nm2 is ", m2)

setmetatable(tab2, m2)
print("\nthe matetable of a table tab2 is", getmetatable(tab2))
  • 运行结果
base_getmetatable.png

总结

  • 没有元表的对象返回nil
  • 有普通原表的对象返回元表本身,由tab1 返回的结果table: 001A9968等于m1可知。
  • 当对象的元表包含字段"__metatable"时,则会直接返回这和字段的值,由第三组的运行结果可知。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容