102.lua元表是什么,我为什么学过就忘

2023-01-05  本文已影响0人  人生玩家Eli

接触lua时间不短了,但每隔一段时间不用,就感觉有点陌生。

元表我记得我也看过,但让我现在说是什么,我也说不清楚,所以我又回去认真复习了一下。

用一句通俗的话来形容

如果用一句通俗的话来形容的话,

我觉得,元表是为了扩展table的功能!让table更强大!

这就很好理解了,很通俗,没有专业术语。

能说出通俗的解释,

(如果我说得不对,还请指正)

多思考这个东西的本质

学一个新东西的时候,可以去想:

通过这么一番思考

意识到重要性了,自然会引起大脑的重视,印象更深刻,有利于自己灵活使用。

来个元表的例子

mytable = {}
metatable = {
    __index = function(_, name)
        print("不存在key"..name)
    end
}

setmetatable(mytable, metatable)

print(mytable.var1)

首先声明了两个表,一个叫mytable,另一个叫metatable

如果我访问mytable中的一个key,这个key不存在,那我会得到一个nil值。

我想给mytable添加一个功能,当我访问不存在的key时,给我输出提示,怎么做呢?

这时就会用到元表了,

通过setmetatable方法,给mytable设置一个元表(metatable),就好像给mytable装了个胳膊,让mytable拥有了metatable的功能。

可以看到metatable里有个函数,其功能就是输出"不存在某key"的提示。

但还有一个东西,__index这是什么?

这叫元方法,看看文档怎么定义的:

__index: 索引 table[key]。 当 table 不是表或是表 table 中不存在 key 这个键时,这个事件被触发。 此时,会读出 table 相应的元方法。

所以当我们在mytable中访问不存在的key时,就会触发这个元方法。

这样通过元表和元方法就实现了给表扩展功能的目的。

更多元方法可以看lua文档

具体通过元表可以实现哪些实用的功能,可以找些lua项目源码看看。

上一篇 下一篇

猜你喜欢

热点阅读