Lua __index

前言#

上一篇文章中大概讲了API函数lua_getfield的用法,其中讲到调用lua_getfield方法时可能触发对应 "index" 事件的元方法,下面我们来看一下这个神奇的元方法。

内容#

元方法在lua中堪称强大,我们来试想一下,如果对一个table进行取值操作,但是table根本就没有这个值呢?一般情况下,lua会返回一个lua独有的值nil来表示访问的值不存在。那么如果我们不希望这样,而是想在访问无效时调用一个默认的操作应该怎么办呢?这就需要我们实现这个表的元表,以及元表的__index方法,实现的过程如下:

  • 首先我们新建一个文件,文件命名为__index.lua,然后在文件中编写如下代码:
-- 定义一个table
local information = 
{
    name = "tom",
    age = 18,
    sex = "man",
}

-- 打印一下信息
print("the information is :")
print(information.name)
print(information.age)
print(information.sex)
print(information.address)

local mt = {
    __index = function(table, key)
    print("I haven't this field : " .. key);
end
}

-- 设置原表
setmetatable(information, mt);

-- 再次打印信息
print("\nafter set __index, the information is :")
print(information.name)
print(information.age)
print(information.sex)
print(information.address)

  • 结果


    __index.png

总结#

  • 在实现__index方法之前,打印address的值显示是nil
  • 元表中我们定义了__index方法,给出了自己的提示信息,那么当调用information表中的值再次为nil时就会调用我们写的默认方法给出提示。
  • 学会用元方法来解决table字段的默认值问题。
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容