lua table访问的元方法
来源:互联网 发布:pl2303hx数据手册 编辑:程序博客网 时间:2024/06/08 07:00
1。__index元方法
Window = {} --创建一个名字空间
--使用默认值来创建一个原型
Window.prototype = {x=0,y=0,width=100,height=100}
Windwo.mt = {} --创建元表
--声明构造函数
function Window.new(o)
setmetatable(o,Window.mt)
return o
end
定义__index元方法:
Window.mt.__index = function(table,key)
return Window.prototype(key)
end
w = Window.new{x=10,y =20}
print(w.width) -->200
__index元方法不必一定是一个函数,也可以是一个table,
例如 Window.mt.__index = Window.prototype这个跟上面的函数是等效的
2.__newindex元方法
__newindex元方法与__index 类似,不同之处在于前者用于table的更新,而后者用于table的查询
3.具有默认值的table
function setDefault(t,d)
local mt = {__index = function() return d end}
setmetatable(t,mt)
end
tab = {x=10,y=20}
print(tab.x,tab.z) -->10,nil
print(tab.x,tab.z) -->10,0
但是这个方法不好,默认值d和元方法关联在一起了,无法为所有table都使用用一个元表,改进一下,把默认值存放在table本身中,用一个额外的字段保存
local mt = {__index = function(t) return t.___end}
function setDefault(t,d)
t.___ = d
setmetatable(t,mt)
end
4.跟踪table的访问
local index = {} --创建私有索引
local mt = {
__index = function(t,k)
print("* access to element "..tostring(k))
return t[index][k]
end
__newindex = function(t,k,v)
print("*update of element " ..tostring(k).."to"..tostring(v))
t[index][k] = v --更新原来的table
end
}
function track(t)
local proxy = {}
proxy[index] = t
setmetatable(proxy,mt)
return proxy
end
现在,若要监视table t,唯一要做的就是执行: t = track(t)
- lua table访问的元方法
- lua 元方法__newindex,实现只读的table
- Lua元方法的使用
- lua元方法__index,对table进行初始化,设置默认值
- 利用lua的元表追踪table变量的变化
- C/C++访问Lua中table元素方法总结
- C/C++访问Lua中table元素方法总结
- lua元方法的简单介绍
- Lua元表中__index元方法的作用
- Lua中__newindex元方法的使用
- Lua中打印Table的方法
- c遍历lua中table的方法
- Lua 元表 元方法
- lua元方法__index
- lua元方法__newindex
- Lua -- __index元方法
- lua 元方法
- lua的元表
- 文件上传时判断是否为图片
- Android 性能优化
- C++面试笔试题目(选2)(字符串,原码反码补码)
- AJAX跨域访问
- 第十一周项目1层次遍历算法的验证
- lua table访问的元方法
- POJ 2288 Islands and Bridges 状态压缩DP
- category添加成员变量
- Java将Unix时间戳转换成指定格式日期
- Java基础面试题笔记(2)
- 每天00:00:01循环执行定时任务
- iOS多线程GCD
- 移动端(html5)Safari下用keyup实时监控input值的变化无效
- ——黑马程序员——OC中block访问外部变量