一、相关介绍请参考:Lua中__index原方法介绍

二、使用示例

代码如下

下面示例使用的元素迭代器

--1.列表元素迭代器,仅返回列表中每一个元素,改列表索引必须为连续的数字
function listIterator(list)
local index = 0;
local listLen = #list
return function ()
index = index + 1
if index <= listLen then
return list[index]
end
end
end
--当作这是一个类
paramentClass = {id = "1", num = 1}
function paramentClass:new(obj, objId, objNum)
obj = obj or {} --如果初始化对象为空,创建一个新的表
setmetatable(obj, self) --设置元表,相当于定义结构,指定表地址
--(1)设置默认域,相当于设置结构中成员的默认值;
--(2)这里self是隐藏的第一参数,代表调用方法的自身,这里就是元表paramentClass这个表
--(3)所以这里可以写成paramentClass.__index = paramentClass
self.__index = self
self.id = objId
self.num = objNum
return obj
end --当作这是一个表
operationList = {}
function operationList:add(oId, onum)
table.insert(self, paramentClass:new(nil, oId, onum))
end
function operationList:add2(oId, onum)
table.insert(self, {id = oId, num = onum})
end --下面是向表operation中插入数据及输出结果
operationList:add("test1", 100)
operationList:add2("test2", 200)
operationList:add("test3", 300) --这里同时修改了“test1”的值
for thisoL in listIterator(operationList) do
print("this ID is "..thisoL.id.."\nthis Num is "..thisoL.num)
end

输出结果:

注:值得注意的是,在上述示例中,我们通过示例的输出可以看到,当我们多次修改paramentClass的值,那么之前paramentClass也会随之改变,这是因为paramentClass的元地址始终都是指向本身,这里可以理解为系统内存中只分出了一个用于存放paramentClass值的地址,所以无论我们怎么重复调用修改,远了引用到paramentClass的值也会随之改变

Lua中__index元方法的介绍与使用的更多相关文章

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

    [元表] 元表中的键为事件(event),称值为元方法(metamethod). 通过函数getmetatable查询不论什么值的元表,通过函数setmetatable替换表的元表. setmetat ...

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

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

  3. Lua __index元方法

    [Lua __index元方法] 当你通过键来访问 table 的时候,如果这个键没有值,那么Lua就会寻找该table的metatable(假定有metatable)中的__index 键.如果__ ...

  4. lua元表与元方法

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

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

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

  6. 【Lua】Lua中__index与元表(转)

    转载于:http://blog.csdn.net/xocoder/article/details/9028347 Lua的表本质其实是个类似HashMap的东西,其元素是很多的Key-Value对,如 ...

  7. Lua中__index和__newindex实践

    [具有默认值的table] 我们都知道,table中的任何字段的默认值都是nil,但是通过元表,我们可以很容易的修改这一规定,代码如下: function setDefault(tb, default ...

  8. Lua中调用C++方法

    目前项目,使用了Lua脚本,至于使用Lua的好处不再赘述了.于是对Tolua做了一些小小的学习,总结一下吧. 主要说一下如何在Lua中调用C++方法. Lua调用C++的桥梁,是tolua.tolua ...

  9. lua 元表与元方法示例

    -- 1.检查是否有元表local t = {1, 2}print(getmetatable(t))     -- nilprint("----------------------" ...

  10. Java中的wait方法 简单介绍。

    一 wait方法怎么用? package com.aaa.threaddemo; /* * 多线程中的wait方法? public final void wait() throws Interrupt ...

随机推荐

  1. 常用ansible命令梳理

    命令的具体格式 : ansible <host-pattern> [-f forks] [-m module_name] [-a args] 场景 命令 查询线上所有机器某个文件的含有某个 ...

  2. 纷繁复杂的操作系统到底是什么关系从APPLE到Android到Linux等

    各个系统之间的关系 最近接触了很多很多系统,多种多样,纷繁复杂,感觉有点乱想整理以下思路,结果一下笔内容还挺多,不全,就是现在能见到的,梳理一下,站在一个外行的角度写写省的乱,不科学,也不知道是否完全 ...

  3. 刘蓉年谱.PDF

    书本详情 刘蓉年谱.PDF 所有责任者: 陆宝千著 所有题名: 并列正题名:A chronological biography of Liu JungChronological biography o ...

  4. openGL 学习笔记 (二) 使用GL API 绘制出属于自己的矩形

    在OpenGL中所有的事物都是在3D空间中,但是我们所看到的屏幕成像却是2D的像素数组.这导致OpenGL的大部分工作就是把得到的3D坐标转换为适应屏幕的2D图像.转换的整个处理过程是由OpenGL的 ...

  5. 安卓app的签名打包

    今天学习了什么是Android程序的签名打包. Android APP都需要我们用一个证书对应用进行数字签名,不然的话是无法安装到Android手机上的,平时我们调试运行时到手机上时, 是AS会自动用 ...

  6. Razor视图cshtml做到运行时编译【提高开发效率】

    当你的.NET开发工具升级到.NET Core版本以上,就会发现有时候无法将视图界面做的修改可以直接保存后刷新输出,一般都需要重新热重载或重新编译,这样会导致开发效率过慢的行为,开发者无法直接直观地看 ...

  7. 批处理命令for循环(cmd命令)

    记录一下: https://www.cnblogs.com/Braveliu/p/5081087.html

  8. spark之依赖关系

    spark的每个RDD都会记录从创建到当前算子的依赖(血缘关系),当该RDD的部分分区数据丢失时,它可以根据这些信息来重新运算和恢复丢失的数据分区 ---  toDebugString 方法查看 On ...

  9. Vue之使用umy-ui库的u-table解决 el-table当存在大量数据时,界面操作卡顿。

    提示:一.下面的1. 对应 二.下面的1.:2.则对应2. 错误排查:在使用中如果出现:readding 'style' undefined类似错误的, 可以先排查 u-table中height的值引 ...

  10. SQLSERVER判断是否为数字ISNUMERIC

    从SQLSERVER 2005新增isnumeric函数,返回1则字符串是数值,返回0则认为不是数值 但里面有些其他的字符也返回1,不知道是怎么个思路,是不是花旗国的规则? SELECT ISNUME ...