Lua.LearningLua.5-document-for-luaL_findtable-function
Learning Lua: 5 - Document for luaL_findtable() function
문서에서 luaL_을 찾을 수 없습니다.findtable () 함수에 대한 설명입니다. 보충을 시도합니다.
1 LUALIB_API const char *luaL_findtable (lua_State *L, int idx,
2 const char *fname, int szhint);
@brief
luaL_findtable () 는 인자 idx로 표시된 target-table에서 fname이라는 table를 찾습니다.fname 은 "tableA.tableB.tablec"를 지원합니다.
찾을 테이블을 등급별로 명명합니다. 그 중에서 target-table에서 "table A"를 키로 하는 필드의 값은 테이블 형식이어야 합니다. 그렇지 않으면 "table A"로 되돌아옵니다.
@parameters
L: lua_State
idx: target-table 재lua_State 객체 L의 위치
fname: target-table에서 찾을 table의 이름입니다.GrandfatherTableName. ParentTableName. TableName 형식을 지원합니다.
szhint: 찾은table가 존재하지 않으면 fname에 대응하는table를 새로 만들고, szhint는 새로운table를 만들 때non-arrayelements의 알림 값입니다.lua_createtable () 을 참조하십시오.
@return
성공: NULL로 돌아가기;L의 top 위치(즉, -1의 위치)는 찾은 테이블을 유지합니다.
이상: fname에 문제가 있는 부분을 되돌려줍니다.L이 호출 LuaL_로 복원됩니다.findtable () 전의 상태입니다.
luaL_findtable () 코드는 다음과 같습니다. 1 LUALIB_API const char *luaL_findtable (lua_State *L, int idx,
2 const char *fname, int szhint) {
3 const char *e;
4 lua_pushvalue(L, idx); // lua_pushvalue(): Pushes a copy of the element at the given valid index onto the stack. // A 5 do {
6 e = strchr(fname, '.');
7 if (e == NULL) e = fname + strlen(fname);
8 lua_pushlstring(L, fname, e - fname); // lua_pushlstring(): Pushes the string pointed to by s
with size len
onto the stack. // B 9 lua_rawget(L, -2); // lua_rawget(): Similar to lua_gettable
, but does a raw access // C 10 if (lua_isnil(L, -1)) { /* no such field? */
11 lua_pop(L, 1); /* remove this nil */
12 lua_createtable(L, 0, (*e == '.' ? 1 : szhint)); /* new table for field */ // D
13 lua_pushlstring(L, fname, e - fname);
14 lua_pushvalue(L, -2);
15 lua_settable(L, -4); /* set new table into field */ // E
16 }
17 else if (!lua_istable(L, -1)) { /* field has a non-table value? */
18 lua_pop(L, 2); /* remove table and value */
19 return fname; /* return problematic part of the name */
20 }
21 lua_remove(L, -2); /* remove previous table */ // F
22 fname = e + 1;
23 } while (*e == '.');
24 return NULL;
25 }
lua_gettable() 1 void lua_gettable (lua_State *L, int index);
"Pushes onto the stack the value t[k]
, where t
is the value at the given valid index and k
is the value at the top of the stack.
This function pops the key from the stack (putting the resulting value in its place). As in Lua, this function may trigger a metamethod for the "index"event "Ref[1]
lua_createtable() 1 void lua_createtable (lua_State *L, int narr, int nrec);
"Creates a new empty table and pushes it onto the stack. The new table has space pre-allocated for narr
array elements and nrec
non-array elements."Ref[1]
lua_settable() 1 void lua_settable (lua_State *L, int index);
"Does the equivalent to t[k] = v
, where t
is the value at the given valid index, v
is the value at the top of the stack, and k
is the value just below the top.
This function pops both the key and the value from the stack. As in Lua, this function may trigger a metamethod for the "newindex"event"Ref[1]
lua_remove() 1 void lua_remove (lua_State *L, int index);
"Removes the element at the given valid index, shifting down the elements above this index to fill the gap. Cannot be called with a pseudo-index, because a pseudo-index is not an actual stack position."Ref[1]
Reference
일.http://www.lua.org/manual/5.1/manual.html
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSON
JSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다.
그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다.
저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.
1 LUALIB_API const char *luaL_findtable (lua_State *L, int idx,
2 const char *fname, int szhint);
1 LUALIB_API const char *luaL_findtable (lua_State *L, int idx,
2 const char *fname, int szhint) {
3 const char *e;
4 lua_pushvalue(L, idx); // lua_pushvalue(): Pushes a copy of the element at the given valid index onto the stack. // A 5 do {
6 e = strchr(fname, '.');
7 if (e == NULL) e = fname + strlen(fname);
8 lua_pushlstring(L, fname, e - fname); // lua_pushlstring(): Pushes the string pointed to by s
with size len
onto the stack. // B 9 lua_rawget(L, -2); // lua_rawget(): Similar to lua_gettable
, but does a raw access // C 10 if (lua_isnil(L, -1)) { /* no such field? */
11 lua_pop(L, 1); /* remove this nil */
12 lua_createtable(L, 0, (*e == '.' ? 1 : szhint)); /* new table for field */ // D
13 lua_pushlstring(L, fname, e - fname);
14 lua_pushvalue(L, -2);
15 lua_settable(L, -4); /* set new table into field */ // E
16 }
17 else if (!lua_istable(L, -1)) { /* field has a non-table value? */
18 lua_pop(L, 2); /* remove table and value */
19 return fname; /* return problematic part of the name */
20 }
21 lua_remove(L, -2); /* remove previous table */ // F
22 fname = e + 1;
23 } while (*e == '.');
24 return NULL;
25 }
1 void lua_gettable (lua_State *L, int index);
1 void lua_createtable (lua_State *L, int narr, int nrec);
1 void lua_settable (lua_State *L, int index);
1 void lua_remove (lua_State *L, int index);
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.