美文网首页
102.lua元表是什么,我为什么学过就忘

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

作者: 人生玩家Eli | 来源:发表于2023-01-05 23:07 被阅读0次

接触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项目源码看看。

相关文章

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

    接触lua时间不短了,但每隔一段时间不用,就感觉有点陌生。 元表我记得我也看过,但让我现在说是什么,我也说不清楚,...

  • 为什么学过的东西总是隔天忘?

    你有没有过这样的经历:订阅了N个公众号各种干货要啥都有,每次一有更新就开始热血沸腾地阅读收藏阅读收藏,下...

  • 为什么会学完就忘?——摘自《五维学习力》

    为什么会学完就忘? 如果不是年龄增长导致记忆力出现了问题,那么是什么原因导致我们总是学完就忘呢? 要找到善忘的原因...

  • 阅读100本书,我的改变和奇迹。

    缘起:为什么开始百天行动 读书读完记不住;学习当时学会了,随后就忘;工作中遇到的问题不知道怎么解决,对学过的概念一...

  • 向内求进步最快

    你学过很多知识,学的当时甚是兴奋,过后便忘。原因是什么? 记忆分短记忆和长记忆,学后便忘的只是短记忆,在脑中处于零...

  • 为什么学过好几遍,还是会忘?

    1.没有真正理解? 2.内容较多且杂,没有梳理知识的层次结构,所以记忆效果不好? 3.单纯的记忆力不好? 4.读的...

  • 引入的标准头文件与标准输出以及FOR循环

    感觉C学了一遍又一遍,大学学过,工作的时候也学过,奈何一直在弄JAVA,没有怎么用过C,学了就忘,忘了就....算...

  • 为什么学了就忘

    为什么学了就忘 你有没有这样的经历,上课时听老师讲挺明白,可是在晚上写作业时就忘了,不得不翻笔记,找课本回顾。其实...

  • 2022-06-06

    你真的会教学吗?-- 读《大概念教学》有感 在我们教学中会发现这样的现象:为什么孩子们学过以后就会忘?为什么老...

  • 建构你的知识体系,让你的效能倍增

    建构主义,在学习教育学的过程已经接触,一直不能理解是什么意思,总是学过了就忘,今天听了丽芳老师的课,终于搞清楚了,...

网友评论

      本文标题:102.lua元表是什么,我为什么学过就忘

      本文链接:https://www.haomeiwen.com/subject/ybzjcdtx.html