一.什么是lua语言?以及如何安装lua?
- Lua 是用 C 语言开发的可扩展的轻量级编程语言。它起源于 1993 年由 Roberto lerusalimschy,Luiz Henriqu
e de Figueiredo 与 Waddemar Celes 领导的一个内部项目。 - 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 - 如果缺少readline ,centos系统可以通过执行yum install readline-devel 进行安装
二.我们来编写第一个Lua程序吧
- lua提供交互式编程,在命令行执行lua就启动了交互模式
- 我们可以执行lua 之后 , 执行
print("Hello world")
我们还通过编写一个以.lua结尾的文件
- 在test.lua中写入
print("Hello world") - 执行
lua test.lua - 输出
Hello world
三.Lua变量定义
- 一个变量定义就是告诉解释器在什么地方创建多大的存储空间,包括一个可选的类型以及该类型的一个或多个变量名的列表
type variable_list- local d,f = 5 , 7 – 声明局部变量
- d,f = 7, 3 — 声明全局变量
- d,f = 10 – 声明全局变量,d为10,f为nil
- 同时,还可以 local a,b
- a = 10 , b = 30
- 交换变量 a,b = b,a
- 左值和右值 ,
一般能在内存中取到确切地址的是左值,不然为右值
四.lua数据类型
-
nil用于区分值是否有数据,nil 表示没有数据。 -
boolean布尔值,有真假两个值,一般用于条件检查。 -
number数值,表示实数(双精度浮点数)。 -
string字符串。 -
function函数,表示由 C 或者 Lua 写的方法。 -
userdata表示任意 C 数据。 -
thread线程,表示独立执行的线程,它被用来实现协程。 -
table表,表示一般的数组,符号表,集合,记录,图,树等等,它还可以实现关联数组。它可以存储除了
nil 外的任何值。
五.操作符号
==判断两个操作数是否相等,若相等则条件为真,否则为假。 (A == B) 为假。~=判断两个操作数是否相等,若不相等则条件为真,否则为假。 (A ~= B) 为真。>如果左操作数大于右操作数则条件为真,否则条件为假。 (A > B) 为假。<如果左操作数小于右操作数则条件为真,否则条件为假。 (A < B) 为真。>=如果左操作数大于或等于右操作数则条件为真,否则条件为假。 (A >= B) 为假。<=如果左操作数小于或等于右操作数则条件为真,否则条件为假。 (A <= B) 为真。and逻辑与运算符。如果两个操作数都非零,则条件为真。 (A and B) 为
假。or逻辑或运算符。如果两个操作数中其中有一个非零,则条件为真。 (A or B) 为真。not逻辑非运算符。翻转操作数的逻辑状态。如果条件是真,则逻辑非运算符会将其变假。!(A and B) 为
真。- … 连接两个字符串。 若 a 为 “Hello”,b 为 “World”,则 a…b 返回 “Hello Worl
d”。 #一元运算符,返回字符串或者表的长
度。#“Hello” 返回 5。
六.Lua语言和C/C++交互
lua和C交互的一个重要的数据结构lua_State,它是进行数据交换的堆栈,按照严格的LIFO规则(后进先出,始终存取栈顶)
void (lua_pushnil) ( lua_State *L );
void (lua_pushnumber) ( lua_State *L , lua_Number n);
void (lua_pushinteger) ( lua_State *L , lua_Integer n);
void (lua_pushlstring) ( lua_State *L , const char *s , size_t l);
void (lua_pushstring) ( lua_State *L , const char *s );
从函数名称我们可以看出我们可以向栈中压入nil, number, integer, string等类型.
lua还提供了函数,对堆栈进行插入,删除等操作例如:
int (lua_gettop) ( lua_State *L );
void (lua_settop) ( lua_State *L , int idx);
void (lua_pushvalue) ( lua_State *L , int idx);
void (lua_remove) ( lua_State *L , int idx);
void (lua_insert) ( lua_State *L , int idx);
void (lua_replace) ( lua_State *L , int idx);
int (lua_checkstack) ( lua_State *L , int sz);
函数中的idx参数是数据在栈中的索引,栈中的我们以第一个压入栈中的索引为1,第二个为2,也可以使用负数索引,-1始终表示栈顶的索引,-2表示栈顶下面的第二个元素索引.
lua_gettop函数获取堆栈中元素的个数,也是栈顶元素索引,一个负数索引-x对应于正数索引为gettop-x+1;
lua_settop设置栈顶到指定索引,例如:lua_settop(L, 0)也就是清空堆栈;
lua_remove和lua_insert表示先指定索引插入和删除元素,其他元素作相应移动;
lua_replace从栈顶弹出元素设置到指定的索引位置;
目前这部分先写到这里,有时间的话会进行添加
















