lua语言的学习(一.1)

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,你看出来了吗?
end

for i=2,10 do
 assert(p[i-1].y==p[i].x)
end
 
for i=1,10 do
 assert(M.a[i]==i)
end

for i=2,10 do
 assert(M.p[i-1].y==M.p[i].x)
end

for i=1,10 do
 assert(pp[i].x==M.p[i].x and p[i].y == M.pp[i].y)
end

for 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)
end

for i=1,10 do
 array.a[i] = a[10-i+1]
	M.a[i] = 10-i+1
	assert(array.a[i]==M.a[i])
end

for i=2,10 do
 array.p[i] = array.pp[1]
	assert(array.p[i].x==0 and array.p[i].y==1)
end

print("Array test OK")//如果全部没错就执行这一句,(上面的assert是断言,只要里面的判断语句为假就终止执行程序了)
上面那句bug就是:i=1,所以啊a[0]被跳过了,所以上来断言就为假,(这个bug今天仔细看才发现的)所以昨天没调出来呜呜。。。。

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






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值