随笔分类 -  LUA

摘要:Lua中的table就是一种对象,即它拥有状态、拥有独立于其值的标识(self)、table与对象一样具有独立于创建者和创建地的征集周期 什么叫对象拥有独立的生命周期? Account = {balance = 0}function Account.withdraw(v) Account.balance = Acount.balance-vend--则可进行如下调用Account.... 阅读全文
posted @ 2013-11-22 16:03 瓜蛋 阅读(1227) 评论(0) 推荐(0)
摘要:lua中每个值都有一个元表,talble和userdata可以有各自独立的元表,而其它类型的值则共享其类型所属的单一元表。lua在创建table时不会创建元表。t = {}print(getmetatable(t)) --显示过元表 此时是nil--可以用setmetatable来设置或修改任何table的元表t1 = {}setmetatable(t,t1)assert(getmetatable(t) == t1)任何table可以作为任何值的元表,而一组相关的table可以共享一个通用的元表,此元表描述了一个共同的行为。一个tabel甚至可以作为它自己的元表,用于描述其特有行为。在lua. 阅读全文
posted @ 2013-11-18 12:42 瓜蛋 阅读(4024) 评论(0) 推荐(0)
摘要:1.数组操作 void lua_rawgeti(lua_State * L ,int index,int key) void lua_rewseti(lua_State * L,int index,int key) index表示table在栈的位置,key表示元素在table中的位置 test.lua内容 tab = {"a","b","c","c","e","f","g","h... 阅读全文
posted @ 2013-11-17 13:13 瓜蛋 阅读(1110) 评论(0) 推荐(0)
摘要:因为之前一直使用lua for windows来搭建lua的使用环境,但是最新的 lua for windows 还没有lua5.2,我又想用这个版本的lua,所以被逼无奈只能自己编一下lua源码。首先从lua的官网下载你想要使用的lua源码,比如我下载的就是lua5.2。解压后内容如下:所有的lua源码都放在了 src 文件夹下,当然,不同的lua版本目录结构有可能不一样,但是都会有 src 这个文件夹,只有这个才是我们编译必须的。而且lua越做越精简了,5.1的版本里面还有一些test的例子之类的,5.2就只剩下必须的内容了。然后,如果是第一次编译lua,还是建议看一下doc文件夹下面的r 阅读全文
posted @ 2013-11-17 00:58 瓜蛋 阅读(836) 评论(0) 推荐(1)
摘要:lua_pcall和lua_call功能一样,只是lua_pcall提供了一个可以提供错误处理函数的功能首先压入函数 ,再依次压入参数,现在你就可以调用lua_call了,函数调用后将参数,函数都弹栈,函数返回时会将返回值依次压栈。调用前堆栈情况参数参数函数调用后堆栈情况返回值注意:无论在c函数里怎么调用栈,在pcall之后都会按函数的参数和返回值恢复栈 阅读全文
posted @ 2013-11-08 20:29 瓜蛋 阅读(1938) 评论(0) 推荐(0)
摘要:全局变量的操作void lua_getglobal(lua_State * L ,const char * name)此函数从lua中取出一个名为name的全局变量并将其压入栈中。如当lua文件内容为width = 200 height = 300时,以下代码int _tmain(int argc, _TCHAR* argv[]){ lua_State *L = luaL_newstate(); luaL_openlibs(L); if(0 != luaL_loadfile(L,"config_width_height.lua")) { printf("l... 阅读全文
posted @ 2013-07-07 13:39 瓜蛋 阅读(955) 评论(0) 推荐(0)
摘要:lua连接数据库不只luasql这个库,但目前更新最快的的貌似是这个luasql,他是开源的,支持的数据库功能如下:Connect to ODBC, ADO, Oracle, MySQL, SQLite and PostgreSQL databases;Execute arbitrary SQL statements;Retrieve results in a row-by-row cursor fashion.源码直接编译就得到一个dll,这个dll可以被c++或lua引用1.首先下载luasql源代码http://www.keplerproject.org/luasql/index.htm 阅读全文
posted @ 2013-07-07 03:42 瓜蛋 阅读(23557) 评论(3) 推荐(1)
摘要:1.一些用来遍历lua表的api简介以下是对下面几个函数的认识不对请批评指正:lua_istable:是否是一个表 lua_gettable(L,int index) :把lua栈的索引为index表的lua栈的index+1所指的索引的值弹出。也就是弹出table[index+1]; lua_next(L,index):先把 表(lua栈 index所指的表), 的当前索引弹出,再把table 当前索引的值弹出,也就是先弹出 table的索引,再弹出table索引的值 2.代码示例// lua_table_extent.cpp : 定义控制台应用程序的入口点。//#include ... 阅读全文
posted @ 2013-05-29 20:54 瓜蛋 阅读(4545) 评论(4) 推荐(0)
摘要:Lua可以调用C函数的能力将极大的提高Lua的可扩展性和可用性。对于有些和操作系统相关的功能,或者是对效率要求较高的模块,我们完全可以通过C函数来实现,之后再通过Lua调用指定的C函数。对于那些可被Lua调用的C函数而言,其接口必须遵循Lua要求的形式,即typedef int (*lua_CFunction)(lua_State* L)。简单说明一下,该函数类型仅仅包含一个表示Lua环境的指针作为其唯一的参数,实现者可以通过该指针进一步获取Lua代码中实际传入的参数。返回值是整型,表示该C函数将返回给Lua代码的返回值数量,如果没有返回值,则return 0即可。需要说明的是,C函数无法.. 阅读全文
posted @ 2013-04-20 21:33 瓜蛋 阅读(493) 评论(0) 推荐(0)
摘要:1. 栈1.1 说明lua与C语言操作都是通过栈来进行的。这个栈是抽象的栈,栈中每一个元素都能保存任何类型的LUA值。 要获得一个lua中的一个值时(例如一个全局变量),只要调用一个Lua的Api函数,Lua就会将指定的值压入栈中。 要将一个值传入Lua时,需要先将这个值压入栈,然后再调用Lua Api,Lua就会获取值并将此值从栈中弹出。 几乎所有的lua api都会使用到栈,luaL_loadbuffer将它的结果(编译好的程序或错误消息)留在栈中;lua_pcall会调用栈中的一个函数,若发生错误则将错误信息留在栈中。 1.2 栈的索引与查询元素以栈底为参考物:api... 阅读全文
posted @ 2013-04-09 13:29 瓜蛋 阅读(3659) 评论(2) 推荐(0)