Lua.LearningLua.5-document-for-luaL_findtable-function
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 byswith sizelenonto the stack. // B
lua_rawget(L, -); // lua_rawget(): Similar tolua_gettable, but does a raw access // C
if (lua_isnil(L, -)) { /* no such field? */
lua_pop(L, ); /* remove this nil */
lua_createtable(L, , (*e == '.' ? : szhint)); /* new table for field */ // D
lua_pushlstring(L, fname, e - fname);
lua_pushvalue(L, -);
lua_settable(L, -); /* set new table into field */ // E
}
else if (!lua_istable(L, -)) { /* field has a non-table value? */
lua_pop(L, ); /* remove table and value */
return fname; /* return problematic part of the name */
}
lua_remove(L, -); /* remove previous table */ // F
fname = e + ;
} while (*e == '.');
return NULL;
}
lua_gettable()
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()
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()
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()
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.LearningLua.5-document-for-luaL_findtable-function的更多相关文章
- Lua.LearningLua.7-userdata
Learning Lua: 7 - userdata 1. Userdata basic "There are eight basic types in Lua: nil, boolean, ...
- 苹果手机浏览器$(document).on(“click”,function(){})点击无效的问题
<label class="js_highlight" style="display: inline-block;float: left;width: 50%;&q ...
- 苹果手机浏览器的$(document).on(“click”,function(){}) 绑定的事件点击无效
需要给对应的元素加上 cursor: pointer 的css样式才可以生效点击事件:
- $(document).ready(){}、$(fucntion(){})、(function(){})(jQuery)onload()的区别
1.首先说JQuery的几个写法 $(function(){ //do someting }); $(document).ready(function(){ //do so ...
- JQuery $(function(){})和$(document).ready(function(){})
document.ready和onload的区别——JavaScript文档加载完成事件页面加载完成有两种事件一是ready,表示文档结构已经加载完成(不包含图片等非文字媒体文件)二是onload,指 ...
- $(function(){})和$(document).ready(function(){})
document.ready和onload的区别——JavaScript文档加载完成事件 页面加载完成有两种事件 一是ready,表示文档结构已经加载完成(不包含图片等非文字媒体文件) 二是onloa ...
- jquery的 $(function(){ }) = $(document).ready(function(){ }) ,及页面的加载顺序
document.ready和onload的区别:一.JavaScript文档加载完成事件页面加载完成有两种事件一是ready,表示文档结构已经加载完成(不包含图片等非文字媒体文件) 二.是onloa ...
- Lua function 函数
Lua支持面向对象,操作符为冒号‘:’.o:foo(x) <==> o.foo(o, x). Lua程序可以调用C语言或者Lua实现的函数.Lua基础库中的所有函数都是用C实现的.但这些细 ...
- $(function(){})和$(document).ready(function(){}) 的区别
document.ready和onload的区别——JavaScript文档加载完成事件 页面加载完成有两种事件 一是ready,表示文档结构已经加载完成(不包含图片等非文字媒体文件) 二是onloa ...
随机推荐
- python学习-day12:列表、元祖、字典介绍和内置
list:列表 >>>----可以被修改.修改成元素,元素可以使单独的数字,也可以是:新的list. 通过:链表..每个元素存储的时候,同时会指向下一个元素. 二.list编辑修改方 ...
- Android中RelativeLayout各个属性的含义
android:layout_above="@id/xxx" --将控件置于给定ID控件之上android:layout_below="@id/xxx" - ...
- day6-3面向对象高阶
面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使用(可以讲多函数中公用的变量封装到对象中) 对象,根据模板创建的实例(即:对象),实 ...
- 在win下开发c++代码, 推荐一个工具dev c++
官方地址:http://bloodshed-dev-c.en.softonic.com/
- InnoDB: Error number 24 means ‘Too many open files’.--转载
一.问题的描述 备份程序 执行前滚的时候报错.(-apply-log) InnoDB: Errornumber 24 means 'Too many open files'. InnoDB: Some ...
- Windows Server 2003服务器无法下载.exe文件的解决方法
今天架设了一台Windows Server 2003的网站服务器,发现打开网页后无法下载网站中的.exe文件,经过研究问题得以解决,拿来做个备忘. 解决方法非常简单,只需要在IIS中,将网站属性里的执 ...
- eclipse配置javacv0.8
之前配置了一次javacv,但是忘了做笔记,这次又重新查了一遍资料,很多东西模棱两可,浪费了很多时间,这次配置成功,总结如下,希望能帮到大家. 如不明确,可以联系我. javacv下载 https ...
- Asp.net 怎样去除表单多行文本框滚动条
<textarea style="overflow:hidden;border-width:0px;">永远没有滚动条</textarea><text ...
- jquery tmpl遍历
最近发现大家用模板渲染一些顺带逻辑功能代码块时,用jquery tmpl较多,遇到了一些问题,现在就个人以前研究过的一切常用功能作介绍,主要针对遍历,其它的大家可以自行浏览一起网站,如:http:// ...
- xtrabackup备份与恢复实践
说明 xtrabackup --percona 特点: 开源,在线备份innodb表 支持限速备份,避免对业务造成影响 支持流备 支持增量备份 支持备份文件压缩与加密 支持并行备份与恢复,速度快 ...