marvinII
2012-10-03 23:25:31 +08:00
是setmetatable 不是 meta data
5.1 manual 里有实现:
function gettable_event (table, key)
local h
if type(table) == "table" then
local v = rawget(table, key)
if v ~= nil then return v end
h = metatable(table).__index
if h == nil then return nil end
else
h = metatable(table).__index
if h == nil then
error(···)
end
end
if type(h) == "function" then
return (h(table, key)) -- call the handler
else return h[key] -- or repeat operation on it
end
end
__index的作用就很清楚了。
Lua的问题都在mail list里讨论,可以订阅。另外,lua user wiki很好,很全面,可以参考。