lua元表学习

 1 a = {1, 2}
 2 b= {3, 4}
 3
 4 vector2 = {}
 5 function vector2.Add(v1, v2)
 6     if(v1 == nil or v2 == nil)then
 7         return nil
 8     end
 9     local res = {}
10     res[1] = v1[1] + v2[1]
11     res[2] = v2[1] + v2[2]
12     return res;
13 end
14
15 vector2.__add = vector2.Add
16
17 setmetatable(a, vector2)
18 setmetatable(b, vector2)
19
20 res = a + b
21
22 print(res[1], res[2])

元表操作的一般流程

1.定义原始表

2.定义元表

3.定义元方法

4.设置元表

 1 str1 = {"I", "love", "lua"}
 2
 3 myStr = {}
 4 function myStr.ToString(str)
 5     res = {}
 6     for i = 1, #str do
 7         res[i] = str[i]
 8     end
 9     return table.concat(res, " ")
10 end
11
12 myStr.__tostring = myStr.ToString
13
14 setmetatable(str1, myStr)
15
16 print(str1)
str2 = {str1 = "我",str2 = "爱", str3 = "撸啊"}
myStr = {}
function myStr.ToString(str)
    res = {}
    for  i,v in pairs(str) do
       res[#res+1] = v
    end

    return table.concat(res, " ")
end

myStr.__tostring = myStr.ToString

setmetatable(str2, myStr)

print(str2)

原文地址:https://www.cnblogs.com/blackteeth/p/10164369.html

时间: 2024-08-02 18:33:16

lua元表学习的相关文章

lua 语句学习

版本:1.0 日期:2014.5.17 2014.6.1 版权:© 2014 kince 转载注明出处 在介绍SwitchButton之前,先来看一下系统Button是如何实现的.源码如下: @RemoteView public class Button extends TextView { public Button(Context context) { this(context, null); } public Button(Context context, AttributeSet att

[转]LUA元表

lua元表和元方法 <lua程序设计> 13章 读书笔记 lua中每个值都有一个元表,talble和userdata可以有各自独立的元表,而其它类型的值则共享其类型所属的单一元表.lua在创建table时不会创建元表. t = {} print(getmetatable(t)) --显示过元表 此时是nil --可以用setmetatable来设置或修改任何table的元表 t1 = {} setmetatable(t,t1) assert(getmetatable(t) == t1) 任何t

lua指针学习

按照书上的例子,运行了下,lua指针关键就是3个值,指针函数,不变量,控制变量 function iter(a,i) --指针函数    i=i+1    local v=a[i]    if v then        return i,v    endend function isp(a)    --返回指针函数,不变量,控制变量    return iter,a,0end for k,v in isp({1,2,4}) do --控制变量是k,也就是指针函数返回的第1个赋值的变量    p

lua元表(metatable)和元方法(metamethod)

元表概念: 引言:Lua中的每个值都有一套预定义的操作集合,如数字相加等.但无法将两个table相加,此时可通过元表修改一个值的行为,使其在面对一个非预定义的操作时执行一个指定操作. 访问机制:一般的元方法都只针对Lua的核心,也就是一个虚拟机.它会检测一个操作中的值是否有元表,这些元表是否定义了关于次操作的元方法.例如两个table相加,先检查两者之一是否有元表,之后检查是否有一个叫“__add”的字段,若找到,则调用对应的值.“__add”等即时字段,其对应的值(往往是一个函数或是table

Lua JSONRPC学习笔记

JSON RPC JSON RPC 为利用json数据格式来执行远程调用方式, 作用同xmlrpc,不过与xmlrpc相比, jsonrpc更加轻量,json更加节省数据量,更加可读性高. 官网网站: http://www.json-rpc.org/ JSONRPC协议规范: http://www.json-rpc.org/wiki/specification lua实现的jsonrpc项目: https://github.com/craigmj/json4lua http://json.lua

lua本学习笔记功能

Lua本学习笔记功能 1.  函数返回 指定任务的主要功能是完成,在这种情况下,函数被用作调用语句.函数可以计算并返回值,在这种情况下,作为分配值表达式语句使用. 语法: funcationfunc_name(arguments-list) Statements-list end 调用函数的时候,假设參数列表为空,必须使用()表示是函数调用. Print(8*9,9/8) a = math.sin(3) +math.cos(10) print(os.date()) 上述规则有一个例外.当函数仅仅

Lua 学习之基础篇八&lt;Lua 元表(Metatabble)&amp;&amp;继承&gt;

讲到元表,先看一段table的合并动作. t1 = {1,2} t2 = {3,4} t3 = t1 + t2 attempt to perform arithmetic on a table value (global 't1') 程序会报错,因为不知道如何对两个table执行+运算,这个时候就需要通过元表来定义,有点类似c中的运算符加载.我们看一下如何通过元表实现合并操作. local mt = {} --定义mt.__add元方法(其实就是元表中一个特殊的索引值)为将两个表的元素合并后返回

lua元表

__index元方法:按照之前的说法,如果A的元表是B,那么如果访问了一个A中不存在的成员,就会访问查找B中有没有这个成员.这个过程大体是这样,但却不完全是这样,实际上,即使将A的元表设置为B,而且B中也确实有这个成员,返回结果仍然会是nil,原因就是B的__index元方法没有赋值.别忘了我们之前说过的:“元表是一个操作指南”,定义了元表,只是有了操作指南,但不应该在操作指南里面去查找元素,而__index方法则是“操作指南”的“索引失败时该怎么办”.这么说有点绕.所以: 举个栗子: fath

lua——元表、元方法、继承

[元表] 元表中的键为事件(event),称值为元方法(metamethod). 通过函数getmetatable查询任何值的元表,通过函数setmetatable替换表的元表. setmetatable(只能用于table)和getmetatable(用于任何对象) 语法:setmetatable (table, metatable),对指定table设置metatable      [如果元表(metatable)中存在__metatable键值,setmetatable会失败] 语法:tm