2011-12-13 73 views

回答

6

您可以使用setmetatable東西和__index元方法:

local t1 = {a = 1, b = 2, c = 3, d = 4} 

setmetatable(t1, { 
    __index = function(table, key) 
     return "something" 
    end 
}) 

print(t1.hi) -- prints "something" 

請注意,當您執行此操作時不會調用t.nonexistant = something。爲此,您需要__newindex metamethod:

local t1 = {a = 1, b = 2, c = 3, d = 4} 

setmetatable(t1, { 
    __index = function(table, key) 
     return "something" 
    end, 

    __newindex = function(table, key, value) 
     rawset(table, tostring(key) .. '_nope', value) 
    end 
}) 

print(t1.hi) -- prints "something" 
t1.hi = 'asdf' 
print(t1.hi) -- prints "something" 
print(t1.hi_nope) -- prints "asdf"