LUA 元表和元方法
原始访问:rawget (table, index)
返回不触发元表的实际访问结果
参数table:指定表,参数index:指定索引
__index:访问表中不存在的字段时触发
访问表中不存在的字段时,LUA会首先查找__index元方法,如果没有找到则返回nil,如果找到了则按这个方法执行或表中相同的字段执行。
__index可以是表或函数
当__index是函数时,LUA会将这个表的地址和不存在的字段作为两个参数来调用元方法。
当__index是表时,LUA会使用这个不存在的键去寻找表中对应的键然后取值。
do t = {} -- 这是一个对象 mt = {} -- 元表 mt.__index = {lv=60, health=50000} -- 当__index是一个表时 t.new = function (name) -- 实例化对象 local newt = {} -- 每次引用时创建一个新表 setmetatable (newt, mt) -- 设置元表 newt.name = name -- 初始化名字属性 return newt -- 返回初始化后的表 end player1 = t.new("达达") -- 实例化一个对象,给一个名字 print (player1.name) -- 输出他的name属性 print (player1.lv) -- 试图输出对象不存在的字段,该操作会触发元表__index,在表中寻找不存在的字段 print (player1.health) -- 同上 player2 = t.new("小田") -- 实例化另一个对象,给一个名字 print (player2.name) print (player2.lv) print (player2.health) --[[ 达达 60 50000 小田 60 50000 --]] end