2
有沒有一種方法可以實現類似於python的__getitem__
的機制?在Lua表中實現fallback/default-getter
例如,具有以下內容:
local t1 = {a=1, b=2, c=3, d=4}
如果代碼,t1.e
會叫,然後我希望有其他人返回,而不是nil
有沒有一種方法可以實現類似於python的__getitem__
的機制?在Lua表中實現fallback/default-getter
例如,具有以下內容:
local t1 = {a=1, b=2, c=3, d=4}
如果代碼,t1.e
會叫,然後我希望有其他人返回,而不是nil
您可以使用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"