21
내가 루아 < 5.2 용으로 작성된 라이브러리를 적응하고 있고 전화에 도착 내가하는 것과 모르는
: polycoreLib
가luaL_openlib 교체 5.2
static const struct luaL_Reg polycoreLib []
인 경우
luaL_openlib(L, "Polycore", polycoreLib, 0);
을 luaL_openlib
으로 전화를 대체하려면 어떻게해야합니까?
루아 위키는 states : 주어진 이름의 글로벌 테이블이 검색 가능성이 생성되기 때문에 같은 luaL_openlib(L, name, lreg, x);
같은
전화는주의 깊게 다시 작성해야합니다.
, 같이 테이블을 결합하는 호출자의 책임 지표입니다. 5.3에서이 작업을 수행하는 방법을 파악하려고 시도하면 항상이 답변으로 돌아 오지만이 대답에는 충분한 정보가 없습니다. 첫 번째 코드 블록은 이전 항목을 덮어 씁니다. 이 문제에 대한 픽스는 lua_getglobal() 호출에서 nil 참조 문제를 던져 버리고, 마지막 호출이 어떤 종류의 조회를 수행하는지 또는 "Ploycore"라는 이름에 바인딩하는 방법을 알지 못합니다. 내가 뭘 놓치고 있니? – James
또한 마지막에 1을 반환하면 luaopen_Polycore() 호출에있는 것처럼 느껴집니다 ... luaL_newlib() 호출 후 안전하게 메타 테이블을 만들 수 있습니까? (나는 잘못된 gettop() 호출을 받고있었습니다.) (그리고 luaL_newlib()은 lua_newtable() luaL_setfuncs() 호출을위한 래퍼입니다.) – James
@James'luaL_setfuncs'는 스택 맨 위에있는 테이블을 사용합니다. 따라서 기존 테이블과 병합하는 것은 새 테이블 대신 해당 테이블을 스택에 넣는 것입니다. 가져온 테이블이 이미 전역 이름에서 사용 가능한 경우 전역 이름에서 계속 사용할 수 있습니다. 분명히 테이블을 같은 키로 병합 할 수는 없습니다. 그 (또는 서브 테이블)가 필요하면 수동으로 어떻게 든 처리해야합니다. (새 테이블을 만들고 가져온 테이블에 삽입하기 만하면 서브 테이블을 쉽게 사용할 수 있습니다.) –