나는 Lua에 다소 익숙하다. (아직 많이하지는 않았지만) 나는 메타 테이블 주위에 내 마음을 감싸려고 노력하고있다. 나는 그 (것)들을 이전에 일해달라고했다 그러나 지금 (나가 몇 달 후에) 나는 진짜로 이상한 무언가를 조우했다.Lua metamethods가 호출되지 않는다.
이 스크립트는 실행할 때 무엇을 인쇄해야합니까?
__mt = {}
__mt.__index = function(table, key)
print("In __index")
return 99
end
test = {}
test.x = 5
setmetatable(test, __mt)
print(test.x)
개인적으로, 나는 그것을 실행 때마다 나는 인덱스 메타 메소드가 실행 얻을 수 있습니다 할 5 아무것도 얻을 수 없다, 그러나 99 다음 (메타 메서드에서) "__index에서"인쇄를 기대. 그냥 rawget()
을 대신 사용하는 것처럼 동작합니다.
print(getmetatable(test).__index(test, "x"))
을 추가 호기심
는 옳은 일을 할 것입니다. metatable 거기에, __index()
올바른지, 그냥 호출되지 않습니다.
이것은 버그입니까, 아니면 그냥 바보 같은 짓입니까? 나는 말할 수 없다.
아, 그래서 나는 바보 같은 짓을하고있었습니다. 이전에는 빈 테이블에서 사용자 지정 인덱스 메서드를 사용했습니다. 저장된 데이터의 함수를 반환하는 방법이 있습니까 (예 : 저장된 값이 2 배)? –
숨겨진 테이블을 자신이 가지고있는 테이블과 같이 사용해야하고 __newindex를 덮어 쓰면 숨겨진 테이블을 가리킬 수 있습니다. 그런 식으로, 당신의 사건은 항상 꺼져 버릴 수 있습니다. 나는이 기법을 자주 사용했다. – Puppy