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. Flink – CEP NFA

    看看Flink cep如何将pattern转换为NFA? 当来了一条event,如果在NFA中执行的? 前面的链路,CEP –> PatternStream –> select –> ...

  2. dispatch_barrier_async,加锁

    dispatch_barrier_async用于文件读写,在写的时候,不允许进行读操作,在写操作完成才能进行读取操作,为了保证线程安全 加锁的方式: 1. barrier 2. NSLock 3. @ ...

  3. java 网络编程(五)Socket多线程上传文件

    客户端: package cn.sasa.socketUploadFileDemo; import java.io.FileInputStream; import java.io.IOExceptio ...

  4. Postfix 邮件服务器搭建

    搭建服务环境: Centos 6 配置域名hosts: mail.demonC6.com 1.清理系统自带的邮件软件 # rpm -qa | grep sendmail* # rpm -e sendm ...

  5. 对于python setup install的程序如何删除干净

    python很好用,尤其是用过easy_install的朋友更是觉得它的便捷,卸载命令也很简单 easy_install -m package-name但是面对源码安装的怎么办呢? setup.py ...

  6. MVVM软件设计模式(转)

    add by zhj: MVVM是一种软件设计模式,这里要说一下设计模式,我们通常所的设计模式是指面向对象中的设计模式,用在面向对象编程语言中.但软件设计模式是更高一个级别的设计模式,两者不是同一个东 ...

  7. 小程序支持打开APP了 还有小程序的标题栏也可以自定义

    就在刚刚,小程序上线两个新能力——小程序支持打开APP了,小程序的标题栏区域开放自定义.用户可以在小程序里更方便地获取到APP的服务了——APP链接分享到微信,打开小程序页面后,用户从该小程序页面里, ...

  8. JDBC和hibernate,mybatis的比较

    在学习使用mybatis之前,先比较下jdbc编程和hibernate编程各自的优缺点. JDBC: 我们平时使用jdbc进行编程,大致需要下面几个步骤: 1,使用jdbc编程需要连接数据库,注册驱动 ...

  9. jquery 无缝轮播

    新闻公告无缝轮播--demo 理解:向上移动一个li的高度+margin-bottom值,同时将ul第一个的li插入到ul的最后一个位置. <!DOCTYPE html> <html ...

  10. PHP中MySQL、MySQLi和PDO的用法和区别

    PHP的MySQL扩展(优缺点) 设计开发允许PHP应用与MySQL数据库交互的早期扩展.mysql扩展提供了一个面向过程 的接口: 并且是针对MySQL4.1.3或更早版本设计的.因此,这个扩展虽然 ...