Lua学习笔记
Lua环境安装
Linux上安装Lua方法如下:
curl -R -O http://www.lua.org/ftp/lua-5.3.0.tar.gz
tar zxf lua-5.3.0.tar.gz
cd lua-5.3.0
make linux test
make install
1、Lua基本语法
lua脚本的执行
print("hello world")
print("Chen qiang")
使用lua名执行脚本,输出结果如下:
cq@server:~/lua-workspace$ lua hello.lua
hello world
Chen qiang
也可以指定编译器运行,修改hello.lua如下:
#!/usr/local/bin/lua
print("hello world")
print("Chen qiang")
修改文件为可执行权限:chmod +x hello.lua
执行脚本如下:
cq@server:~/lua-workspace$ ./hello.lua
hello world
Chen qiang
注释
单行注释
-- 单行注释
多行注释
--[[
多行
注释
--]]
标识符
A~Z a~z 下划线开头可以接大小字符、数字 下划线开头后面最好不接大写字母,防止和lua内部使用的名称冲突。例如:_VERSION
不允许使用特殊字符:@、$和%
关键字
and if else elseif goto do not then nil while return break end function local trun false or for until
全局变量
默认情况下,变量总是全局变量
删除一个全局变量,将nil赋值给变量即可。
C++中调用lua
hello.lua
--简单的例子,只做整数加法
function add(x, y)
return x + y
end
main.cpp
#include <iostream>
#include <string.h>
using namespace std;
extern "C"
{
#include "lua.h"
#include "lauxlib.h"
#include "lualib.h"
}
int main()
{
//1.创建一个新的lua state,分配内存,创建
lua_State *L = luaL_newstate();
if (L == NULL)
{
cout << "New state fail";
return 0;
}
#if 0
// 2.加载Lua代码
int bRet = luaL_loadfile(L, "hello.lua");
if (bRet)
{
cout << "Load file fail";
return;
}
// 3.运行Lua脚本
bRet = lua_pcall(L, 0, 0, 0);
if (bRet)
{
cout << "pcall error" << endl;
return;
}
#else
// 运行lua脚本,这一步可以取代2,3步
luaL_dofile(L, "hello.lua");
#endif
// 此时栈顶为0,执行完毕lua_getglobal后压变量add入栈(lua中函数也是变量),栈顶为1,
int bRet = lua_getglobal(L, "add");
// 压入参数1入栈,执行完毕lua_pushnumber后栈顶为2
lua_pushnumber(L, 12);
// 压入参数2入栈,执行完毕lua_pushnumber后栈顶为3
lua_pushnumber(L, 23);
// 执行add函数,2告诉lua栈中有2个参数,1告诉lua需要返回一个值,执行该函数时候,lua将参数2,参数1,函数名依次从栈取出然后执行,执行完毕后,把结果压入栈,所以执行完毕后栈顶为1,保存了返回结果给C++
lua_pcall(L, 2, 1, 0);
// lua执行完毕会将结果放在栈顶,这里读出栈顶的结果,并打印
int ret = lua_tonumber(L, -1);
cout << ret << endl;
// 关闭当前lua state,释放内存
lua_close(L);
return 0;
}
编译运行:
cq@server:~/test-workspace$ g++ main.cpp -L./lib -llua -ldl -o main cq@server:~/test-workspace$ ./main 35
LuaBridge的使用

浙公网安备 33010602011771号