Lua 元表与元方法

目录

​​​​​​​前言

一、set get元表

二、元方法

        1.算数运算相关的元方法

        2.关系运算相关的元方法

        3.库定义相关的元方法

        4.表相关的元方法

5.常见问题

总结


前言

本文用于记录和总结我对Lua元表和元方法的学习与了解。元方法的函数名都以两个下划线开头,为了能看出是两个下划线,下面在文字描述部分都用下划线空格下划线的方式表现“_ _”。


一、set get元表

Lua语言中只能为table 设置元表:setmetatable(), getmetatable()。

testTable = {}
testMetaTable = {}
setmetatable(testTable, testMetaTable)
print(getmetatable(testTable) == testMetaTable) -- output:true

注意:

  • 字符串都共有一个元表(字符串标准库设置),其他类型默认没有元表。
  • 一个表可以成为自己的元表,用于描述自身特有的行为。

二、元方法

1.算数运算相关的元方法

算数运算元方法
_ _add加法_ _band按位与
_ _mul乘法_ _bor按位或
_ _sub减法_ _bxor按位异或
_ _div除法_ _bnot按位取反
_ _idivfloor除法_ _shl向左移位
_ _unm负数_ _shr向右移位
_ _mod取模
_ _pow幂运算_ _concat连接运算符

2.关系运算相关的元方法

关系运算元方法
_ _le小于或等于
_ _eq等于
_ _lt小于

3.库定义相关的元方法

_ _tostring

_ _metatable get/set会用到

_ _pairs

4.表相关的元方法

_ _index, _ _newindex, _ _len (#t 调用)

三.常见问题:

问题1. table A = {}, table B 是A的元表,当访问A.xxx 的时候,会调用B的_ _index元方法,问_ _index 的参数是什么?

回答:是A,和 xxx;即 B._ _index = function(_, key) end  

_ 为 A,key 为 xxx;

总结

元表和元方法是Lua语言编程中很重要的一部分,工程中常用于实现继承特性。也会常出现在面试过程中。

参考文献:

书:Lua程序设计

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值