아래 코드에서 __index에서 메타 테이블을 중첩하려고 시도했지만 작동하지 않습니다. 내가 원하는 것은 값이 t1 또는 t2이고 관련 값을 반환하면 그렇지 않으면 가장 안쪽의 __index에서 함수를 호출하는 것입니다. 이것이 가능한가?루아에서 중첩 메타 테이블
아래에서 x [ "hello"]는 값을 반환 할 수 있습니까? 나는 가장 바깥의 __index에서 함수를 사용할 수 있다는 것을 알았지 만, 중첩 된 메타 테이블을 사용하여 어떻게 든 이것을 할 수있을 것 같습니다.
tia.
x = { val = 3 } -- our object
mt = {
__index = {
t1 = 2,
t2 = 3,
__index = function (table, key)
print("here"..key)
return table.val
end
}
}
setmetatable(x, mt)
print(x["t1"]) -- prints 2
print(x.t2) -- prints 3
print(x["hello"]) -- prints nil???
이 작동하지만 메타 테이블
x = { val = 3 } -- our object
mt1 = {
t1 = 2,
t2 = 3
}
mt = {
__index = function (table, key)
local a = mt1[key]
if a == nil then
print("here"..key)
a = "test"
end
return a
end
}
setmetatable(x, mt)
print(x["t1"])
print(x.t2)
print(x["hello"])
'setmetatable()'호출을 중첩하면 첫 번째 인수가 반환됩니다. 또한 여기에 많은 전역 변수를 작성하면 'local'은 친구입니다. –