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. IO密集型 计算密集型

    参考:https://www.cnblogs.com/zhangyux/p/6195860.html 参考:廖雪峰 协程 gevent IO密集型任务指的是磁盘IO或者网络IO占主要的任务,计算量很小 ...

  2. jquery基础学习之DOM篇(二)

    在此之前请牢记,jquery 是一个合集对象!!!! 1.节点创建 js创建方法: 创建元素:document.createElement 设置属性:setAttribute 添加文本:innerHT ...

  3. java中使用jdbc配置连接串时mysql 5.6与5.7版本“编码”参数有区别!

    在mysql5.6中 java程序使用jdbc时链接字符串应该使用?characterEncoding=utf-8,而5.7版本可以省略,否则可能会有相关的语句执行结果出错! String drive ...

  4. linux进程间通信同步-共享内存

    参考:https://www.cnblogs.com/charlesblc/p/6142868.html 使用有名信号量,sem_open().sem_close().sem_post().sem_w ...

  5. SQL函数汇总大全

    聚合函数对一组值计算后返回单个值.除了count(统计项数)函数以外,其他的聚合函数在计算式都会忽略空值(null).所有的聚合函数均为确定性函数.即任何时候使用一组相同的输入值调用聚合函数执行后的返 ...

  6. zedboard上首个驱动实践——Led

    // led驱动 *myled.c*//头文件 #include<linux/module.h> //最基本的文件,支持动态添加和卸载模块 #include<linux/kernel ...

  7. c语言数组应用

    #include <stdio.h> #define SIZE 5 int main(void) { int sum[3]={0},sum2[SIZE]={0},i,sum1=0; dou ...

  8. passwd 修改密码

    [root@localhost ~]# passwd # 修改 root 用户的密码 [root@localhost ~]# passwd test # 修改指定用户的密码

  9. centos删除用户出错userdel: user xxx is currently used by process 23750

    今天ytkah管理centos用户准备删除某个用户时出错了,提示userdel: user xxx is currently used by process 23750,这是因为xxx用户还在登陆中, ...

  10. 前端框架之Vue(6)-列表渲染

    用v-for把一个数组对应为一组元素 我们用 v-for 指令根据一组数组的选项列表进行渲染. v-for 指令需要使用 item in items 形式的特殊语法, items 是源数据数组并且 i ...