分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 教程案例

Lua学习笔记-metatable元表

发布时间:2023-09-06 01:06责任编辑:彭小芳关键词:meta

   本以为看完C API lua就学的差不多了,没想到越陷越深啊。

   首先说元表的概念,元表是一个特殊的表,作用是定义一个表的操作。类似于C++中类的运算符重载。

   使用元表需要注意的事项:

1.元表可以定义的操作有下面这些

 1 __add(a, b) --加法 2 __sub(a, b) --减法 3 __mul(a, b) --乘法 4 __div(a, b) --除法 5 __mod(a, b) --取模 6 __pow(a, b) --乘幂 7 __unm(a) --相反数 8 __concat(a, b) --连接 9 __len(a) --长度10 __eq(a, b) --相等11 __lt(a, b) --小于12 __le(a, b) --小于等于13 __index(a, b) --索引查询14 __newindex(a, b, c) --索引更新(PS:不懂的话,后面会有讲)15 __call(a, ...) --执行方法调用16 __tostring(a) --字符串输出17 __metatable --保护元表
View Code

2.上面的操作其实是table中一个键对应一个函数,键字符串前面是双下划线(简直坑啊,第一次写半天没发现错误)

3.如果两个表都有定义元表,那么按照下面原则调用:

  • 对于二元操作符,如果第一个操作数有元表,并且元表中有所需要的字段定义,比如我们这里的__add元方法定义,那么Lua就以这个字段为元方法,而与第二个值无关;
  • 对于二元操作符,如果第一个操作数有元表,但是元表中没有所需要的字段定义,比如我们这里的__add元方法定义,那么Lua就去查找第二个操作数的元表;
  • 如果两个操作数都没有元表,或者都没有对应的元方法定义,Lua就引发一个错误。

元表的设置与获取

1 setmetatable(table,metatable): 对指定table设置元表(metatable),如果元表(metatable)中存在__metatable键值,setmetatable会失败 。2 getmetatable(table): 返回对象的元表(metatable)。

下面是例子,这个例子是简单的定义一个“+”运算符,将两个table中对应键的值相加再返回一个新表。至于表的大小是否相等,对应位置类型是否一致,没有做细节处理,这些不是重点。

 1 function add(a,b) ???????????--定义__add需要用到的函数 2 ?local sum={} 3 ?for i,v in ipairs(a) do 4 ??sum[i]=a[i]+b[i] 5 ?end 6 return sum 7 end 8 ?9 a={1,2,3} ????????10 b={9,8,7}11 t={__add=add} ?????????--声明一个表t作为元表,其中__add键对应的值为add函数12 setmetatable(a,t) ?????--设置a的元表为t13 sum=a+b ???????????????--计算a+b,返回新表sum,并且打印14 for i in ipairs(sum) do15 print(sum[i])16 end17 18 运行结果:19 1020 1021 10

Lua学习笔记-metatable元表

原文地址:http://www.cnblogs.com/InitialD/p/7447575.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved