Page's Personal Website

Lua学习笔记(2) 元方法

2016-05-03
lua

[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程序设计》 第二版


Comments

Content