lua学习笔记
? 近日时间比较充裕,学习一下lua语言,顺便写下笔记,方便以后加深学习。 为了方便,我没有编译lua代码,直接下载了lua的动态库及执行文件 链接地址: C/C++调用lua动态库及头文件地址(用于C/C++嵌入Lua脚本解析): http://sourceforge.net/projects/luabinaries/files/5.1.4/Windows%20Libraries/lua5_1_4_Win64_dll8_lib.zip/download(下载这个版本需要在VS2005下编译) 也可以到http://luabinaries.sourceforge.net/download.html或http://www.lua.org找适合自己的版本。 lua脚本解析器地址: http://en.sourceforge.jp/frs/g_redir.php?m=jaist&f=%2Fluabinaries%2F5.2%2FExecutables%2Flua-5.2_Win32_bin.zip 一、"hello world" 哈哈,先使用经典的hello world带进门 1.在“运行”键入cmd打开dos窗口,并将当前目录跳转到lua的目录下(我的是在C:lua-5.2_Win32_bin) 2.在lua目录下创建一下文本文件(test.txt)并加入内容 ?print("hello world") 3.回到dos窗口,输入执行命令lua52.exe test.txt 如图: ? 二、循环语句 在test.txt加入 for i=1,10,2 do ?print("i = " .. i) end 在dos窗口输入命令lua52.txt test.txt如图 注:for语句中 i = 2,2是表示从1开始,每次递增2,到10结束(包含10) ? 三. 变量 lua 的变量是不需要声明类型的 a = 5 b = "hello" print(a.. "? ".. b) 执行打印出来的结果如下 ? 四、 table lua的数据结构和数组都可以由table来实现,实例代码如下: aa = {} aa["xx"] = 11 aa[3] = 22 print(aa["xx"] .." --".. aa[3]) 输出结果: ? 五、函数 lua 的函数语法为 function 函数名(参数) ? 实现... end 下面为一段实例 function add(a,b) ??sum = a + b ??return sum end print("10 + 20 = "..add(10,20)) 执行结果如下: ? 六、C/C++调用lua脚本 1.建立工程 (1).使用VS2005创建一个C++ console工程 (2).将下载到的lua5_1_4_Win64_dll8_lib.zip解压到工程中 (3).在工程中加入对lua51.lib的依赖,可以直接在代码里写如#pragma comment(lib,"lua51.lib"),出可以将其到到工程设置的依赖项目中。 ? 2.C/C++调用lua的流程 C/C++调lua流程大概如下: /*打开lua*/ lua_State *l = lua_open(); /*打开全部的库*/ luaL_openlibs(l); /*执行lua脚本、调用lua信息*/ ... /*关闭lua*/ lua_close(g_l); ? ? 3. 创建一下test.txt的文本并写入如下代码 function add(a,b) ? sum= a+b ?return sum end ? a1 = "hello world" b1 = 50 ? 4. 在VC工程中写入如下测试代码,已经带有较详细注释 #include "stdafx.h" #include <windows.h> #include <iostream> extern "C" { #include "lua.h" #include "lualib.h" #include "lauxlib.h" } ? #pragma comment(lib,"lua51.lib") ? lua_State *g_l; ? /*调用lua的add函数*/ int lua_add(int a,int b) { ???????? lua_getglobal(g_l,"add"); ???????? lua_pushnumber(g_l,a); ???????? lua_pushnumber(g_l,b); ? ???????? lua_call(g_l,2,1); ? ???????? /*get the result */ ???????? intsum = (int)lua_tonumber(g_l,-1); ???????? lua_pop(g_l,1); ???????? returnsum; } ? int _tmain(int argc,_TCHAR* argv[]) { ???????? /*打开lua*/ ???????? g_l= lua_open(); ???????? /*打开全部的库*/ ???????? luaL_openlibs(g_l); ? ???????? /*执行lua脚本,直接通过字符串传入*/ ???????? luaL_dostring(g_l,"print(100)"); ???????? /*执行lua脚本,通过读取配置文件*/ ???????? luaL_dofile(g_l,"test.txt"); ? ???????? /*调用lua的add函数*/ ???????? std::cout<<"calllua add(1,2) = "<<lua_add(1,2) <<std::endl; ???????? ???????? /*获取b1的值*/ ???????? lua_getglobal(g_l,"b1"); ???????? if(lua_isnumber(g_l,-1)) ???????? { ?????????????????? std::cout<<"b1= "<<lua_tonumber(g_l,-1)<<std::endl; ???????? } ? ???????? /*获取a1的值*/ ???????? lua_getglobal(g_l,"a1"); ???????? if(lua_isstring(g_l,-1)) ???????? { ?????????????????? intnLen = 0; ?????????????????? std::cout<<"a1= "<<lua_tostring(g_l,-1,nLen)<<std::endl; ???????? } ? ???????? /*关闭lua*/ ???????? lua_close(g_l); ???????? return0; } 执行结果: 100 call lua add(1,2) = 3 b1 = 50 a1 = hello world ? 总结,学习所花时间,很多没有学深学细,总体来说这门语言入门比较快,易学。没有实际的项目经验还不能深刻理解它的优势所在。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |