加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

lua学习笔记

发布时间:2020-12-14 22:20:26 所属栏目:大数据 来源:网络整理
导读:? 近日时间比较充裕,学习一下 lua 语言,顺便写下笔记,方便以后加深学习。 为了方便,我没有编译 lua 代码,直接下载了 lua 的动态库及执行文件 链接地址: C/C++ 调用 lua 动态库及头文件地址(用于 C/C++ 嵌入 Lua 脚本解析): http://sourceforge.net/

?

近日时间比较充裕,学习一下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.htmlhttp://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"),出可以将其到到工程设置的依赖项目中。

?

2C/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;

?

/*调用luaadd函数*/

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");

?

???????? /*调用luaadd函数*/

???????? 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

?

总结,学习所花时间,很多没有学深学细,总体来说这门语言入门比较快,易学。没有实际的项目经验还不能深刻理解它的优势所在。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读