a = {, }
b= {, } vector2 = {}
function vector2.Add(v1, v2)
if(v1 == nil or v2 == nil)then
return nil
end
local res = {}
res[] = v1[] + v2[]
res[] = v2[] + v2[]
return res;
end vector2.__add = vector2.Add setmetatable(a, vector2)
setmetatable(b, vector2) res = a + b print(res[], res[])

元表操作的一般流程

1.定义原始表

2.定义元表

3.定义元方法

4.设置元表

 str1 = {"I", "love", "lua"}

 myStr = {}
function myStr.ToString(str)
res = {}
for i = , #str do
res[i] = str[i]
end
return table.concat(res, " ")
end myStr.__tostring = myStr.ToString setmetatable(str1, myStr) print(str1)
str2 = {str1 = "我",str2 = "爱", str3 = "撸啊"}
myStr = {}
function myStr.ToString(str)
res = {}
for i,v in pairs(str) do
res[#res+] = v
end return table.concat(res, " ")
end myStr.__tostring = myStr.ToString setmetatable(str2, myStr) print(str2)
teststr = {s1 = "", s2 = ""}

mytable = {}
function mytable.tips()
return "不存在"
end mytable.__index = mytable.tips; setmetatable(teststr, mytable) --TEST CODE
print(teststr["s1"])
print(teststr["s3"]) -- 输出不存在
 testStr = {a = "aaa", b = "bbb"}

 testStr.c = "ccc"   ---添加字段
print(testStr["c"]) ---输出ccc function AddValue(tab, k, v)
print( "你尝试访问的字段不存在"..k)
end setmetatable(testStr, {__newindex = AddValue}) --简化的元方法 testStr.d = "ddd" ---添加字段
print(testStr["d"]) --输出nil
myTab = {}
function TestMethod(tab, num1, num2)
return num1 + num2
end setmetatable(myTab, {__call = TestMethod}) a = myTab(, )
print(a) --输出3

lua元表学习的更多相关文章

  1. 学习Lua setmetatable Lua 元表

    Lua 元表(Metatable) 在 Lua table 中我们可以访问对应的key来得到value值,但是却无法对两个 table 进行操作. 个人理解,这个相当于其他语言的继承,是把这个类的方法 ...

  2. [转]LUA元表

    lua元表和元方法 <lua程序设计> 13章 读书笔记 lua中每个值都有一个元表,talble和userdata可以有各自独立的元表,而其它类型的值则共享其类型所属的单一元表.lua在 ...

  3. lua本学习笔记功能

    Lua本学习笔记功能 1.  函数返回 指定任务的主要功能是完成,在这种情况下,函数被用作调用语句.函数可以计算并返回值,在这种情况下,作为分配值表达式语句使用. 语法: funcationfunc_ ...

  4. lua基础学习(五)

    一.Lua 模块与包 模块类似于一个封装库,从 Lua 5.1 开始,Lua 加入了标准的模块管理机制,可以把一些公用的代码放在一个文件里,以 API 接口的形式在其他地方调用,有利于代码的重用和降低 ...

  5. Step By Step(Lua元表与元方法)

    Step By Step(Lua元表与元方法) Lua中提供的元表是用于帮助Lua数据变量完成某些非预定义功能的个性化行为,如两个table的相加.假设a和b都是table,通过元表可以定义如何计算表 ...

  6. Lua 学习之基础篇八<Lua 元表(Metatabble)&&继承>

    讲到元表,先看一段table的合并动作. t1 = {1,2} t2 = {3,4} t3 = t1 + t2 attempt to perform arithmetic on a table val ...

  7. lua元表与元方法

    lua中提供的元表(metatable)与元方法(metamethod)是一种非常重要的语法,metatable主要用于做一些类似于C++重载操作符式的功能. lua中提供的元表是用于帮助lua变量完 ...

  8. GJM : Lua 语言学习笔记

    Lua笔记 容易与C/C++整合 Lua所提供的机制是C所不善于的:高级语言,动态结构,简洁,易于测试和调试. Lua特有的特征: `1:可扩展性.卓越的扩展性导致了很多人将Lua用作搭建领域语言的工 ...

  9. lua元表和元方法 《lua程序设计》 13章 读书笔记

    lua中每个值都有一个元表,talble和userdata可以有各自独立的元表,而其它类型的值则共享其类型所属的单一元表.lua在创建table时不会创建元表. t = {} print(getmet ...

随机推荐

  1. 【nginx,apache】thinkphp ,laravel,yii2开发运行环境搭建

    缘由 经常会有人问xx框架怎么配置运行环境,这里我就给贴出吉祥三宝(Yii2,Laravel5,Thinkphp5 )的Nginx和Apache的配置,供大家参考 Nginx Yii2 server  ...

  2. 《HTTP - http报文》

    还时推荐一首歌 - 那吾克热<纸飞机> 有没有突然想要个孩子的冲动,哈哈. 读 第三章<HTTP报文内的HTTP信息> 总结 1:用于HTTP协议交互叫做HTTP报文,请求端( ...

  3. Appium入门(6)__appium-desktop安装

    部分摘自:http://www.testclass.net/appium/appium-base-desktop/ Appium-Server主要用来监听移动设备,然后将不同编程语言编写的 appiu ...

  4. es分布式文档系统_bulk api的奇特json格式与底层性能优化关系

    1.bulk api奇特的json格式{"action":{"meta"}}\n{"data"}\n{"action": ...

  5. 【叶问】 MySQL常用的sql调优手段或工具有哪些

     MySQL常用的sql调优手段或工具有哪些1.根据执行计划优化   通常使用desc或explain,另外可以添加format=json来输出更详细的json格式的执行计划,主要注意点如下:     ...

  6. (3.15)mysql基础深入——mysql默认数据库/系统数据库

    (3.15)mysql基础深入——mysql默认数据库 关键词:Mysql默认数据库,mysql系统数据库 系统数据库的组成 一共4个 [1]information_schema(可以理解成字典表) ...

  7. Spark学习:ShutdownHookManager虚拟机关闭钩子管理器

    Java程序经常也会遇到进程挂掉的情况,一些状态没有正确的保存下来,这时候就需要在JVM关掉的时候执行一些清理现场的代码. JAVA中的ShutdownHook提供了比较好的方案. JDK提供了Jav ...

  8. 石子合并(区间DP经典例题)

    题目链接:https://www.luogu.org/problemnew/show/P1880 #include <cstdio> #include <cmath> #inc ...

  9. Linux下修改MySQL数据库字符编码为UTF-8解决中文乱码

    由于MySQL编码原因会导致数据库出现乱码. 解决办法: 修改MySQL数据库字符编码为UTF-8,UTF-8包含全世界所有国家需要用到的字符,是国际编码. 具体操作: 1.进入MySQL控制台 &g ...

  10. css3--之backface-visibility

    使用CSS3 backface-visibility属性制作翻转动画效果:    http://www.htmleaf.com/ziliaoku/qianduanjiaocheng/201504151 ...