lua语言的学习(一.1)

来源:互联网 发布:java中的换行符 编辑:程序博客网 时间:2024/05/17 01:20

2014年3月31日,晚20点40分。还有10天我就正式离职了。白天的时候站在单位窗前,看着天津莫测的天空(阴、雾霾、沙尘暴),吟了一首诗:

啊~~~天津啊

你就像一个老太太

让人想扶也扶不起来啊

=========正文的分割线======今天要两更才行哦=====

第一更

昨天学习了tolua的test,今天来详细分析一下第一个例程array。

首先是array.h
typedef struct Point Point;struct Point{float x;float y;};extern int a[10];extern Point p[10]; extern Point* pp[10];extern int ma[10];extern Point mp[10]; extern Point* mpp[10];typedef struct Array Array;struct Array{ int a[10]; Point p[10];  Point* pp[10];};extern Array array;extern Array* parray;
基本就是为了让为了暴露给lua才extern这些变量的,而正常的变量的定义都在源文件中

下面看看array.cpp(我修改后的)中是啥

extern "C"//必须加,要不报错{#include "lua.h"#include "lualib.h"#include "lauxlib.h"}#include "test.h"#include "tolua++.h"int a[10] = {1,2,3,4,5,6,7,8,9,10};//看,这里是真正的定义处Point p[10] = {{0,1},{1,2},{2,3},{3,4},{4,5},{5,6},{6,7},{7,8},{8,9},{9,10}};Point* pp[10];int ma[10];Point mp[10];Point* mpp[10];Array array;Array* parray = &array;int main (void){int  tolua_test_open (lua_State*);lua_State* L = lua_open();int i;for (i=0; i<10; ++i){pp[i] = &p[i];    ma[i] = a[i];mp[i] = p[i];mpp[i] = pp[i];array.a[i] = a[i];array.p[i] = p[i];array.pp[i] = pp[i];}luaopen_base(L);//luaL_openlibs(L);tolua_test_open(L);//这里是把这些extern的变量暴露给lua脚本的函数,原来以后仔细研究研究,现在时间宝贵,先学会开发吧luaL_dofile(L,"H:\\cocos2d-x-2.2.2\\projects\\cocos2dxlua\\Resources\\test.lua");//我又用全路径了,为了省事lua_close(L);getchar();//这是以前总用的把戏,获取字符,目的是让小黑框停留,按回车键结束return 0;}

好了,这个源文件一目了然,没啥东西,下面看看array.lua

for i=1,10 do assert(a[i]==i)//话说这句话有bug,你看出来了吗?endfor i=2,10 do assert(p[i-1].y==p[i].x)end for i=1,10 do assert(M.a[i]==i)endfor i=2,10 do assert(M.p[i-1].y==M.p[i].x)endfor i=1,10 do assert(pp[i].x==M.p[i].x and p[i].y == M.pp[i].y)endfor i=1,10 do assert(array.a[i] == parray.a[i]) assert(array.p[i].x == parray.pp[i].x and array.p[i].y == parray.pp[i].y)endfor i=1,10 do array.a[i] = a[10-i+1]M.a[i] = 10-i+1assert(array.a[i]==M.a[i])endfor i=2,10 do array.p[i] = array.pp[1]assert(array.p[i].x==0 and array.p[i].y==1)endprint("Array test OK")//如果全部没错就执行这一句,(上面的assert是断言,只要里面的判断语句为假就终止执行程序了)
上面那句bug就是:i=1,所以啊a[0]被跳过了,所以上来断言就为假,(这个bug今天仔细看才发现的)所以昨天没调出来呜呜。。。。

好了,tolua第一个例程完美运行(好傻伯夷)!






0 0
原创粉丝点击