Lua.LearningLua.5-document-for-luaL_findtable-function
2015-08-14 15:48
417 查看
Learning Lua: 5 - Document for luaL_findtable() function
文档中没有找到luaL_findtable()函数的说明,这里尝试补充。LUALIB_API const char *luaL_findtable (lua_State *L, int idx, const char *fname, int szhint);
@brief
luaL_findtable()在由参数idx标识的target-table中查找名字为fname的table。 fname支持"tableA.tableB.tableC"这种
级联的方式来命名要查找的table,其中在target-table中以"tableA"为key的field的值需要是table类型,否则会返回"tableA"。
@parameters
L: lua_State
idx: target-table在lua_State对象L中的位置
fname: 在target-table中所要查找的table的名字。支持"GrandfatherTableName.ParentTableName.TableName"这种形式。
szhint: 如果查找的table不存在,则会新创建fname对应的table,szhint是创建新table时non-array elements的提示值。参见"lua_createtable()"。
@return
成功:返回NULL; L中的top位置(即: -1的位置)会保留找到的table。
异常:返回fname中有问题的部分; L 会被复原为调用luaL_findtable()前的状态。
luaL_findtable()代码如下:
LUALIB_API const char *luaL_findtable (lua_State *L, int idx, const char *fname, int szhint) { const char *e; lua_pushvalue(L, idx); // lua_pushvalue(): Pushes a copy of the element at the given valid index onto the stack. // A do { e = strchr(fname, '.'); if (e == NULL) e = fname + strlen(fname); lua_pushlstring(L, fname, e - fname); // lua_pushlstring(): Pushes the string pointed to by [code]swith size
lenonto the stack. // B
lua_rawget(L, -2); // lua_rawget(): Similar to
lua_gettable, but does a raw access // C
if (lua_isnil(L, -1)) { /* no such field? */
lua_pop(L, 1); /* remove this nil */
lua_createtable(L, 0, (*e == '.' ? 1 : szhint)); /* new table for field */ // D
lua_pushlstring(L, fname, e - fname);
lua_pushvalue(L, -2);
lua_settable(L, -4); /* set new table into field */ // E
}
else if (!lua_istable(L, -1)) { /* field has a non-table value? */
lua_pop(L, 2); /* remove table and value */
return fname; /* return problematic part of the name */
}
lua_remove(L, -2); /* remove previous table */ // F
fname = e + 1;
} while (*e == '.');
return NULL;
}[/code]
lua_gettable()
void lua_gettable (lua_State *L, int index);
"Pushes onto the stack the value
t[k], where
tis the value at the given valid index and
kis 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()
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
narrarray elements and
nrecnon-array elements." Ref[1]
lua_settable()
void lua_settable (lua_State *L, int index);
"Does the equivalent to
t[k] = v, where
tis the value at the given valid index,
vis the value at the top of the stack, and
kis 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()
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
1. http://www.lua.org/manual/5.1/manual.html相关文章推荐
- Lua的string.format 注意事项
- lua学习记录
- C++调用Lua的性能测试
- 使用ngx_lua构建高并发应用
- C/C++与lua实现互调
- Lua简明入门实践(从"基"搞起)_(五)Lua常用小算法
- Lua的局部变量
- Lua中的元表与元方法学习总结
- quick - lua 分辨率适配
- cheat engine lua
- lua闭包的理解以及表与函数的几种表达方法
- skynet项目lua代码简单加密
- Lua1
- Lua笔记11-迭代器和闭包
- lua lua解读
- lua Table的插入简单实现
- lua luaconf解读
- 在mac上使用protoc-gen-lua从proto文件生成lua
- 【深入Lua】理解Lua中最强大的特性-coroutine(协程)
- Lua 标准库 - 基本函数(base function)