Lua的元表(metatable)
metatable允许我们改变table的行为
> Lua中的每一个表都可以有metatable(后面我们将看到userdata也有Metatable)
> Lua默认创建一个不带metatable的新表
> setmetatable(只能用于table)和 getmetatable(用于任何对象)
- 可以使用setmetatable函数设置或者改变一个表的metatable
- 任何一个表都可以是其他一个表的metatable
- 一组相关的表可以共享一个metatable(描述他们共同的行为)
- 一个表也可以是自身的metatable(描述其私有行为)
setmetatable
>【如果元表(metatable)中存在__metatable键值,setmetatable会失败】
语法:setmetatable (table, metatable),对指定table设置metatable
getmetatable
> 【如果元表(metatable)中存在metatable键值,当返回metatable的值】
语法:tmeta = getmetatable (tab),返回对象的元表(metatable)
使用__metatable可以保护元表,禁止用户访问元表中的成员或者修改元表。
print(getmetatable("lua")) -->table: 002F19B8
print(getmetatable()) -->nil
-- 使用__metatable可以保护元表,禁止用户访问元表中的成员或者修改元表。
tA = {}
mt = {}
getmetatable(tA, mt)
mt.__metatable = "lock"
setmetatable(tA, mt)
print(getmetatable(tA)) -->lock
Lua的元表(metatable)的更多相关文章
- lua面向对象封装及元表(metatable)性能测试
Lua本身是没有面向对象支持的,但面向对象编程在逻辑复杂的大型工程却很有用.于是很多人用Lua本身的数据结构table来模拟面向对象.最简单的一种方法是把对象的方法.成员都放到table中.如: -- ...
- lua元表(metatable)和元方法(metamethod)
(一) 元表概念: 引言:Lua中的每个值都有一套预定义的操作集合,如数字相加等.但无法将两个table相加,此时可通过元表修改一个值的行为,使其在面对一个非预定义的操作时执行一个指定操作. 访问机制 ...
- Lua之元表
Lua之metatable 一.元表 Lua中的每个值都有一套预定义的操作集合,也可以通过metatable(元表)来定义一个值的行为,metatable包含了一组meatmethod(元方法). L ...
- Lua中元表的学习
--table 中我们可以访问对应的key来得到value值,但是却无法对两个 table 进行操作. --元表(Metatable),允许我们改变table的行为,可以对两个table进行操作 -- ...
- Lua基础之MetaTable(6)
Lua基础之MetaTable(6) 转载地址:http://nova-fusion.com/2011/06/30/lua-metatables-tutorial/ 关于MetaTable的补充:ht ...
- lua 元表Metatable (六)
元表理解起来比较抽象,但这是lua设置的一种数据结构而已, 假设有table_A.table_B 这2个table,如果table_A要操作table_B,显然是不可能的 因为者都之间是没有关系的,如 ...
- lua元表Metatable
Lua 中的每个值都可以用一个 metatable. 这个 metatable 就是一个原始的 Lua table , 它用来定义原始值在特定操作下的行为. 你可以通过在 metatable 中的特定 ...
- Lua中的元表(metatable)、元方法(metamethod)详解
在第一次看见这两样东西的时候,可能会觉得它很深奥,但其实很好理解,虽然实际上它可能真的很深奥.(小若:停!滚粗.) 1.知道为什么1 + 1 = 2吗? 为什么在Lua中,1+1会等于2呢?(小若:难 ...
- lua中的metatable和metamethod
--元表和元方法给lua里的值设定一些操作,让我们可以对这些操作自定义 --创建一个新的table变量时,它是不存在元表的 --在Lua中,只能设置table的元表,其他类型的值的元表,只能通过C代码 ...
随机推荐
- 安装配置tomcat
1.安装nginx 下载nginx-1.4.3 解压: tar zxvf nginx-1.4.3.tar.gz 编译安装: ./configure --prefix=/app/act/nginx/ng ...
- android listview和button,ImageButton等有事件的控件的总结
public ImageButton(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defSty ...
- 利用Shell命令获取IP地址
一 :获取单个网卡的IPv4地址,方法如下: 方法一:$/sbin/ifconfig ethX | awk '/inet addr/ {print $2}' | cut -f2 -d ":& ...
- 解决a different object with the same identifier value was already associated with the session错误
[转]解决a different object with the same identifier value was already associated with the session错误 这个错 ...
- 【转】免装版tomcat注册成windows系统服务方法
转自:http://blog.csdn.net/huiwenjie168/article/details/42267353 一.下载Tomcat Tomcat可以从http://tomcat.apac ...
- 【BZOJ】【3676】【APIO2014】回文串
回文自动机/Manacher+SA 这道题可以用Manacher找出本质不同的回文串(令max增大的所有回文串),然后再用SA跑出来有多少相同. 还有一种做法就是回文自动机(Orz Hzwer)的裸题 ...
- PowerDesigner(五)-概念数据模型(CDM生成LDM,PDM和OOM)(转)
概念数据模型 概念数据模型(Conceptual Data Model,CDM):表达的是数据整体逻辑结构,该结构独立于任何软件和数据存储结构,即它只是系统分析人员,应用程序设计人员,维护人员和用户之 ...
- PHP第一课:开发环境配置
最近在学php,大概了解了一下php的语法结构,以及一些php及基础的知识.由此想到了要亲手试一试:以为以前是学java的用的 ide是myeclipse,所以对eclipse软件布局有特别的钟爱. ...
- Ckeditor注册事件
这段时间使用js+cookies进行自动草稿保存,个人觉的,这些全在客户端处理比较的好,所以没有使用AJAX+数据库的自动草稿保存方法. 结果出现Ckeditor无法绑定onkeyup,onselec ...
- (转)8 reviews about de novo genome assembly
转自:http://dskernel.blogspot.com/2012/04/8-reviews-about-de-novo-genome-assembly.html 8 reviews about ...