Lua学习笔记-day1:Lua特性、安装、基本语法、数据类型、变量

一、Lua教程

  1. 设计目的:嵌入应用程序,从而为应用程序提供灵活的扩展和定制功能。

  2. 特性:

    1. 轻量级:标准C实现;开放源码;源码2万多行;编译后仅100多Kb。

    2. 可扩展:

    3. 其他特性:

      1. 支持面向过程编程和函数式编程;

      2. 自动内存管理;

      3. 语言内置模式匹配;闭包等;

      4. 通过闭包和table可以支持面向对象的机制:抽象数据、虚函数、继承和重载等。

  3. 应用场景:

    1. 游戏开发;

    2. 独立应用脚本;

    3. Web应用脚本;

    4. 扩展和数据库插件;

    5. 安全系统,如入侵检测系统;

二、Lua环境安装

  1. Linux安装:

    1. curl -R -O http://www.lua.org/ftp/lua-5.3.0.tar.gz

    2. tar zxf lua-5.3.0.tar.gz

    3. cd lua-5.3.0

    4. make linux test

    5. make install

三、Lua基本语法

  1. 交互式编程:类似于python的交互式命令行;

  2. 脚本式编程:类似于bash脚本;

  3. 注释:

    1. 单行注释:--

    2. 多行注释:--[[多行内容--]]

  4. 标示符:

    1. 也就是变量名的定义,与c语言相同(需要以字母或下划线开头;区分大小写)。

  5. 关键词:

    1. Lua保留关键字:

      1. nil、and、or、not、if、then、else、elseif、end、for、do、in、while、repeat、until、break、true、false、local、function、return

    2. 一般约定:

      1. 以下划线开头,后接大写字母的名字(如: _VERSION),为Lua内部保留使用的全局变量。

  6. 全局变量:

    1. 默认情况下,变量总是全局的。

    2. 使用未定义的变量不会报错,此时变量的值为nil。

四、Lua数据类型

  1. Lua是动态类型语言,变量不需要类型定义,只需要为变量赋值。(类似于python)

  2. Lua中有8个基本类型:

    1. nil: 表示无效值;只有nil一个值;在条件表达式中相当于false;

    2. boolean: 包含两个值true和false;

    3. number: 双精度浮点数。类似于c语言中的double;

    4. string: 字符串,用双引号或单引号表示;

    5. function: 有C或Lua编写的函数;

    6. userdata: 表示任意存储在变量中的C数据结构;

    7. thread: 表示执行的独立线路,用于执行协同程序;

    8. table: 关联数组;数组的索引可以是数字或者字符串;

  3. 可以使用type()函数测试变量或值的类型:

    1. type("Hello World!")  --> string

    2. type(10.1)                  --> number

    3. type(print)                 --> function

    4. type(true)                  --> boolean

    5. type(nil)                     --> nil

  4. 各数据类型详细说明:

    1. nil(空):

      1. 表示无效值;类似于C中的void;

      2. 对于全局变量和table,nil相当于删除;

    2. boolean(布尔):

      1. Lua把false和nil看作“假”,其余看作“真”;

    3. number(数字):

      1. 默认为double类型,可以在luaconf.h中修改;

    4. string(字符串):

      1. 用单引号或双引号表示字符串;用两个方括号"[[]]"可以表示多行字符串;

      2. 在数字字符串上执行算术操作时,Lua将会自动把数字字符串转换为数字,然后再执行算术运算;

      3. 字符串连接使用两个点".",如: print("ab".."cd") --输出为"abcd";

      4. 将"#"放在字符串的前面,可以计算字符串的长度,如:print(#"abcd") --输出4;

    5. table(表):

      1. 创建:通过“构造表达式”创建,最简单的构造表达式是{};

      2. 索引可以是数字或字符串;

      3. 索引默认从1开始,不同于C中的数组。

    6. function(函数):

      1. 函数名可以赋值给其他变量;

      2. 可以以匿名函数的方式通过参数传递;

    7. thread(线程):

      1. Lua中,最主要的线程是协同程序(coroutine);

      2. 协同程序的特点:

        1. 拥有自己独立的栈、局部变量和指令指针;

        2. 可以跟协同程序共享全局变量,和其他大部分东西;

      3. 线程和协程的区别:

        1. 线程可以同时运行多个,而协程在任意时刻只能运行一个;

        2. 处于运行状态的协程只有被挂起时才会暂停;

    8. userdata(自定义类型):

      1. 可以将任意C/C++的任意数据类型的数据(通常是struct和指针)存储到Lua变量中。

五、Lua变量

  1. Lua变量有三种类型:全局变量、局部变量和表中的域;

    1. 局部变量:

      1. 使用local显示声明;

      2. 作用域为声明位置开始到语句块结尾结束;

    2. 全局变量:

      1. 哪怕在语句块或函数中,只要没有使用local显示声明,都是全局变量;

  2. 赋值语句:

    1. 可以多个变量同时赋值:

      1. 示例:a, b, c = 1, 2, 3

    2. x,y = y, x --相当于交换x和y的值;

    3. 变量个数与值的个数不一致时:

      1. 变量个数大于值的个数时,按变量个数补nil。

      2. 变量个数小于值的个数时,忽略多余的值。

    4. 最好使用局部变量,好处:

      1. 避免命名冲突;

      2. 访问局部变量的速度比全局变量快;

  3. 索引:

    1. 对table的索引使用方括号"[]",示例:tt['key'];

    2. 当索引为字符串类型时,也可以使用点号".",示例:tt.key;

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值