热门搜索 :
考研考公
您的当前位置:首页正文

Lua __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字段的默认值问题。
Top