[TOC]
index和newindex元方法
学习metatable的时候,已经了解到了这两个元方法的作用:
- “index”: 取下标操作用于访问 table[key] 。
- “newindex”: 赋值给指定下标 table[key] = value 。
那么,由此更深一层理解就是,我们可以对于一个表的index和newindex元方法进行修改以达到修改表默认的读和写的机制。
1. 例子
t = {}
--【注】用table做key
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
end
}
function track(t)
local proxy = {} --每调用一次track,都会生成一个新的proxy
proxy[index] = t
setmetatable(proxy, mt)
return proxy
end
------------------------------------------
-- use
t = track(t)
t[2] = 'hello'
print("t[2]: ", t[2])
print("t[1]: ", t[1])
结果为:
*update of element 2 to hello
*access to element 2
t[2]: hello
*access to element 1
t[1]: nil
参考
[1]《lua程序设计》 第二版