Lua学习笔记
基本信息
Lua是一门强大、高效、轻量、可嵌入的脚本语言。它支持多种编程架构:过程编程、面向对象编程(OOP)、函数式编程、数据驱动编程及数据描述。
Lua结合了简洁的过程语法和强大的数据描述结构(基于关联数组和可扩展语义)。Lua使用动态类型,运行时内部通过寄存器式虚拟机(register-based VM)来执行解释字节码,有自动内存管理和分代GC机制,是配置、编写脚本和原型设计的理想选择。
Lua是作为一个C语言编写的库实现的,其被标准C/C++所兼容。Lua的发行版本中包括一个独立程序(就叫 lua),它就是由Lua库所实现,作为一个完整独立的编译/解释器,也可以用于交互式使用或批量执行。Lua志在成为一门强大轻量可嵌入在任何需要的地方的脚本语言,并且是强力但轻便高效的独立语言。
作为扩展语言,Lua没有 主程序 的概念,它通常是 嵌入 到宿主程序中使用,宿主程序也被称为 被嵌入程序 或简称 宿主 (通常宿主程序指上边说到的独立程序lua)。宿主程序可以调用函数来执行一段Lua代码,可以写入或读取Lua变量,也可以注册C函数供Lua代码调用。通过使用C函数,可以在相同的语法框架下来自定义编程语言,从而使得Lua能够应用于广泛的领域。
基本类型
Lua有八种基本类型:nil、boolean、string、function、userdata、thread和table。
nil 类型是一个单独的值 nil ,主要特质就是不同于其他任何值,通常表示一个没有用的值。 boolean 类型有两种值—— false 和 true 。 nil 和 false 都可以使得条件为假,他们统称为假值( false values )。其他值都使得条件为真。尽管他们都叫假值, false 也常常用来替代 nil ,但是关键的区别在于: false 在表(table)中是个常规值,而 nil 表示一个缺失的键。
table 类型实现了关联数组,即除了 nil 和NaN( Not a Number 是一个特殊的浮点值,被用于IEEE 754标准中,表示一个未定义的数值结果,例如除零运算)之外的值都可以作为索引,而不只是数字。表可以是 异构(heterogeneous) 的,即可以存储所有类型的值(除了 nil )。任何关联了nil值的键都被视为不存在于表中。换句话说,对于表中任意不存在的键,其值都是 nil 。
表是Lua中唯一的组织数据结构的机制,它可以用于表示一般数组、列表、符号表、集合、记录、图、树……等等。对于表示记录,Lua使用属性名来作为索引。语言支持用 a.name 来替代表示 a[“name”] 的语法糖。同时也有些创建表的方法(参见3.4.9)。
变量
变量是存储值的地方。Lua中有三种变量:全局变量、局部变量和表属性。
可见性规则
表的构造
1 | a = { [f(1)] = g; "x", "y"; x = 1, f(x), [30] = 23; 45 } |
等效于下面的代码:
1 | do |