lua基础篇(二)

元表

metatable:(元表)一组元操作(元方法)的集合;

__index:元方法之一,作用:定义了新的索引操作;

????若索引表中没有的key,会去查找表的元方法,即metatable中的__index方法(也可以是另一个表)

????原型:__index = fuunction(table,key) ????????????????--此处的table为调用该元方法的

????????????if type(key) == "number" then

????????????????print("the key‘s value is nil!");

????????????end

????????end

????

__newindex:元方法之一,作用:定义新的赋值操作;

????若对表中不存在的key进行复制操作,执行该元方法(也可以是一个表);

????原型:__newindex = function(table,key,value)

????????????if key == "bucunzide" then

????????????????rawset(table,"bucunzide","geiyige");

????????????end

????????end

?

__add:元方法之一 ,作用类似于运算符重载,用于表之间的运算;

????与__index、?__newindex
不同,操作符索引只能是函数。
它们接受的第一个参数总是目标表, 接着

????是右值 (除了一元操作符"-",即索引__unm)。下面是操作符列表:

  • __add: 加法(+)
  • __sub: 减法(-)
  • __mul: 乘法(*)
  • __div: 除法(/)
  • __mod: 取模(%)
  • __unm: 取反(-), 一元操作符
  • __concat: 连接(..)
  • __eq: 等于(==)
  • __lt: 小于(<)
  • __le:小于等于(<=)

?

__mode:元方法之一,用于指定表的弱引用特性;

????1)key值弱引用,只要其他地方没有对key值引用,那么,table自身的这个字段也会被删除。设置方法:setmetatable(t, {__mode = "k"});

????2)value值弱引用,只要其他地方没有对value值引用,那么,table的这个value所在的字段也会被删除。设置方法:setmetatable(t, {__mode = "v"});

????3)key和value弱引用,规则一样,但是key和value都同时生效,任意一个起作用时都会导致table的字段被删除。设置方法:setmetatable(t, {__mode = "kv"});


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21


t?=?{};

?

--?给t设置一个元表,增加__mode元方法,赋值为"k"

setmetatable(t,?{__mode?=?"k"});

?

--?使用一个table作为t的key值

key1?=?{name?=?"key1"};

t[key1]?=?1;

key1?=?nil;

?

--?又使用一个table作为t的key值

key2?=?{name?=?"key2"};

t[key2]?=?1;

key2?=?nil;

?

--?强制进行一次垃圾收集

collectgarbage();

?

for?key,?value?in?pairs(t)?do

print(key.name?..?":"?..?value);

end

------------------------------------------------------------------------

????rawset(table,key,value) :设置表的索引

????rawget(table,key):获取表的索引

????__index = fuunction(table,key) ????????????????

????????if type(key) == "number" then

????????????--table[key] = 1000;????????????若此处直接使用key索引会再次调用__index方法,进入死循环;

????????????rawset(table,key,1000);????????使用rawset()方法可以直接设置新的键值对,从而避免调用__index和__newindex方法;

????????end

????end

-----------------------------------------------------------------------

lua的log输出:

log_enum = { zhandouxitong = 4,

???????????? rrwuyidyng = 5,

???????????? Wujiangxitong = 6,

???????????? Wujiangxitong2 = 7,

???????????? WujiangxitongServer = 8,

????????????};

function Clog( str,type )

????if type == log_enum.WujiangxitongServer then

????????local info = debug.getinfo(2,"nfSl");

????????local MSG = nil;

????????if info.name then

????????????MSG = string.format("filed:<" .. info.source .. "|func: " .. info.name .. "|>; line:[" .. info.currentline .. "] MSG:\n\t" .. str);

????????else

????????????MSG = string.format("filed:<" .. info.source .. "> line:[" .. info.currentline .. "] MSG:\n\t" .. str);

????????end

????????print(MSG);

????end

end

?

关于debug.getinfo()

????

时间: 2024-11-05 11:28:14

lua基础篇(二)的相关文章

JMS基础篇(二)

简介 异构集成是消息发挥作用的一个领域,大型公司内部可能会遇到很多的平台,Java,.net或者公司自己的平台等. 传送消息还应该支持异步机制,以提高系统整体的性能.异步传输一条消息意味着,发送者不必等到接收者接收或者处理消息,可以接着做后续的处理. 应用程序发送消息至另外一个应用程序,需要使用到消息中间件.消息中间件应提供容错,负载均衡,可伸缩的事务性等特性. JMS与JDBC类似,是一种与厂商无关的API.应用程序开发者可以使用同样的API来访问不同的系统. 可以认为JMS是一种标准,各消息

php基础篇-二维数组排序 array_multisort

原文:php基础篇-二维数组排序 array_multisort 对2维数组或者多维数组排序是常见的问题,在php中我们有个专门的多维数组排序函数,下面简单介绍下: array_multisort(array1,sorting order, sorting type,array2,array3..)是对多个数组或多维数组进行排序的函数. array1 必需.规定输入的数组. sorting order 可选.规定排列顺序.可能的值是 SORT_ASC 和 SORT_DESC. sorting t

php基础篇-二维数组排序姐妹篇

前面介绍了php多维数组排序的一个函数array_multisort() ,想了解的人可以点击 二维数组排序 array_multisort 下面介绍下不适用array_multisort()进行多维数组的排序. 这里介绍下2个php排序函数,一个是asort,一个是arsort. asort(array,sorttype) 函数对数组进行排序并保持索引关系.主要用于对那些单元顺序很重要的结合数组进行排序. 可选的第二个参数包含了附加的排序标识. SORT_REGULAR - 默认.以它们原来的

Qt入门之基础篇 ( 二 ) :Qt项目建立、编译、运行和发布过程解析

转载请注明出处:CN_Simo. 题解: 本篇内容主讲Qt应用从创建到发布的整个过程,旨在帮助读者能够快速走进Qt的世界. 本来计划是讲解Qt源码静态编译,如此的话读者可能并不能清楚地知道为何要静态编译,所以借此篇内容说明一下原由并为之后文章的学习做准备. 即使本片内容只是在围绕一个小小的HelloWorld程序开展,但还是希望朋友们不要急于求成,"欲速则不达". 文章整体思路: 我们循序渐进地来看,一个Qt应用的完成有以下一个重要的步骤: 项目创建->源码编译->程序运行

JavaScript笔记基础篇(二)

基础篇主要是总结一些工作中遇到的技术问题是如何解决的,应为本人属于刚入行阶段技术并非大神如果笔记中有哪些错误,或者自己的一些想法希望大家多多交流互相学习. 1.ToFixed()函数 今天在做Birt报表时, 要显示一列百分比的数据,但因一些特别的原因,不能使用使用百分比样式,即如果数据是0.9538不能显示成“95.38%”的样式,必须显示成“95.38”. 开始时想使用javascript的内置函数Math.round(),可Math.round()只能显示为整数,而不能保留小数. 再网上搜

通过Rancher部署并扩容Kubernetes集群基础篇二

接上一篇通过Rancher部署并扩容Kubernetes集群基础篇一 7. 使用ConfigMap配置redis https://github.com/kubernetes/kubernetes.github.io/blob/master/docs/user-guide/configmap/redis/redis-config redis-config maxmemory 2mb     maxmemory-policy allkeys-lru # kubectl create configma

Hybrid APP基础篇(二)-&gt;Native、Hybrid、React Native、Web App方案的分析比较

说明 Native.Hybrid.React.Web App方案的分析比较 目录 前言 参考来源 前置技术要求 楔子 几种APP开发模式 概述 Native App Web App Hybrid App React Native App 分析 各大开发模式直观对比 如何选择开发模式 另类的app方案 微网页 微信小程序 其它 前言 参考来源 前人栽树,后台乘凉,本文参考了以下来源 对当前主流hybrid app.web app与native app工具的初步比较与分析 H5.React Nati

lua 高级篇(二)

第七章  迭代器与泛型for       迭代器是一种支持指针类型的结构,它可以遍历集合的每一个元素,在Lua中我们常常使用函数来描述迭代器,每次调用该函数就返回集合的下一个元素.    一.迭代器与闭包    一个简单的例子: 我们为一个list写一个简单的迭代器,与ipairs()不同的是我们实现的这个迭代器返回元素的值而不是索引下标: function list_iter(t) local i = 0 local n = table.getn(t) return function () i

自定义View时,用到Paint Canvas的一些温故,讲讲平时一些效果是怎么画的(基础篇 二,图像遮盖,Canvas静态变化)

转载请注明出处:王亟亟的大牛之路 上一篇把简单的一些概念理一理,还画了个圈,那这一篇讲一下图像遮盖"Xfermode"和Canvas的旋转.平移等效果 Xfermode: AvoidXfermode 指定了一个颜色和容差,强制Paint避免在它上面绘图(或者只在它上面绘图). PixelXorXfermode 当覆盖已有的颜色时,应用一个简单的像素异或操作. PorterDuffXfermode 这是一个非常强大的转换模式,使用它,可以使用图像合成的16条Porter-Duff规则的任