这个电子书文档对于Lua开发者来说非常有帮助,是案头必备文档之一。虽然是5.0的版本,但是相差不是很多,因为5.1的更新是在于一些内部(internal)的改变,如GC机制和基于Register的虚拟机。
介绍通过ChunkSpy来分析Lua的虚拟机指令集。
准备用LuaTask来做一些Lua多线程方面的实验,这是源代码,有空看看。
这个电子书文档对于Lua开发者来说非常有帮助,是案头必备文档之一。虽然是5.0的版本,但是相差不是很多,因为5.1的更新是在于一些内部(internal)的改变,如GC机制和基于Register的虚拟机。
介绍通过ChunkSpy来分析Lua的虚拟机指令集。
准备用LuaTask来做一些Lua多线程方面的实验,这是源代码,有空看看。
《 “Lua5.0编程电子书中文版” 》 有 6 条评论
楼主,打扰下,请教一个lua源码问题。
LUA_API void lua_insert (lua_State *L, int idx) {
StkId p;
StkId q;
lua_lock(L);
p = index2adr(L, idx);
api_checkvalidindex(L, p);
for (q = L->top; q>p; q–) setobjs2s(L, q, q-1);
setobjs2s(L, p, L->top);
lua_unlock(L);
}
这个函数中lua栈上增加一个TValue,但是L->top却没有加1,在下实在不明白原因,楼主可否指点一二。
lua_insert
void lua_insert (lua_State *L, int index);
Moves the top element into the given valid index, shifting up the elements above this index to open space. Cannot be called with a pseudo-index, because a pseudo-index is not an actual stack position.
这段Lua manual的lua_insert说明应该可以回答你的问题了,虽然名字上叫做insert,实际是栈顶与某个index的交换,top没有加那是因为只是交换没有新增。
感谢博主的回复,在下还有一个白痴问题相问,在看到如下两个宏时,
#define adjustresults(L,nres) \
{ if (nres == LUA_MULTRET && L->top >= L->ci->top) L->ci->top = L->top; }
#define checkresults(L,na,nr) \
api_check(L, (nr) == LUA_MULTRET || (L->ci->top – L->top >= (nr) – (na)))
有了一些疑惑,L->ci->top和L->top有什么关系,我看到注释上说ci是call info for current function,难道L->top不是随着当前函数调用情况调整的吗?
博主的blog质量真是高,令人获益非浅,感谢你了。
Sil,现在我还没有对Lua代码作比较细节上的研究,所以你的问题现在也没法回答。希望在后面代码阅读的时候能够解释这个问题。
[…] 最好从Programming In Lua (简称PIL)中文版看起,非常有帮助,最好是逐字逐句的看。文档在这里可以下载:http://groups.google.com/group/lua5 或者 http://sunxiunan.com/?p=1512 […]
楼主,你好!请教一个问题:
lua脚本文件如何调用一些大型网站(如淘宝网)的API?具体的例子如要根据客户端IP获得所归属城市,可调用淘宝网的IP地址库借口接口实现,lua脚本如何实现??