C/C ++의 LUA 기능에 대한 참조
-
06-07-2019 - |
문제
테이블 세트에 비교적 깊은 기능이 있습니다. C/C ++에는 해당 함수에 대한 "참조"를 얻고 사용해야 할 때 스택에 (및 args)를 밀어 넣을 수있는 방법이 있습니까?
해결책
이것이 바로 참조 시스템 입니다. 함수 호출 r = luaL_ref(L, LUA_REGISTRYINDEX)
레지스트리에 스택 상단에 값을 저장하고 C 측에 저장할 수있는 정수를 반환하고 함수 호출로 값을 검색하는 데 사용됩니다. lua_rawgeti(L, LUA_REGISTRYINDEX, r)
.
참조 필 장, 문서뿐만 아니라 luaL_ref()
, lua_rawgeti()
, 그리고 luaL_unref()
전체 이야기를 위해.
다른 팁
Lua API (http://www.lua.org/manual/5.1/manual.html#3) 원하는 테이블 멤버를 사용하는 데 사용될 수 있습니다. lua_gettable ()을 사용하여 테이블 멤버를 추출하여 Lua 스택에 놓으십시오. 멤버도 테이블이라면 Lua_getTable ()을 다시 전화 하여이 테이블에 액세스하는 등 ...
(Lua_Rawget ()에 따라 lua_gettable ()보다 더 나은 선택 일 수 있습니다.
의견에 대한 응답으로 추가 :
좋아요 조금 더 흥미 롭습니다. 테이블은 참조 객체 (다소)이므로 어딘가에 가장 안쪽 테이블 참조를 저장하는 것이 안전 할 것입니다.
LUA API는 어쨌든 테이블 심판을 직접 조작 할 필요가 없으므로 심판을 글로벌로 밀어야 할 것입니다. 또는 단일 테이블 항목으로 새 테이블이 작동하지 않으면 아마도 가능합니다. 나중에 심판을 원할 때 글로벌에서 가져 오십시오.
예를 들어
// Final table reference is now at top of stack, after multiple dereferences
lua_setglobal( L, "mytableref" );