初识lua语言(一)

一.什么是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从栈顶弹出元素设置到指定的索引位置;

目前这部分先写到这里,有时间的话会进行添加

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值