lua基础篇(二)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了lua基础篇(二),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2870字,纯文字阅读大概需要5分钟。
内容图文
![lua基础篇(二)](/upload/InfoBanner/zyjiaocheng/1177/1545092a665c4582a4892e771441ec20.jpg)
元表
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
?
????
原文:http://www.cnblogs.com/fegnze/p/4089328.html
内容总结
以上是互联网集市为您收集整理的lua基础篇(二)全部内容,希望文章能够帮你解决lua基础篇(二)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。