Lua – 基本语法

引言

lua作为一种简单、可扩展、可移植及高效的脚本语言,广泛地被用于网络游戏以及手机游戏中。写游戏常常需要跟lua打交道,还是做些笔记记下来,当做备忘,方便以后没事翻一翻 ==。

管方文档

在开始吹逼之前先放一下官方文档,毕竟官方的东西还是挺权威的 http://www.lua.org/manual/ 点击对应版本就可以看相关的api文档或者介绍了

一、类型与值

lua中有8种基础类型如下表所示

数据类型 描述
nil 这个最简单,只有值nil属于该类,表示一个无效值(在条件表达式中相当于false)。
boolean 包含两个值:false和true。
number 表示双精度类型的实浮点数
string 字符串由一对双引号或单引号来表示
function 由 C 或 Lua 编写的函数
userdata 表示任意存储在变量中的C数据结构
thread 表示执行的独立线路,用于执行协同程序
table Lua 中的表(table)其实是一个"关联数组"(associative arrays),数组的索引可以是数字或者是字符串。在 Lua 里,table 的创建是通过"构造表达式"来完成,最简单构造表达式是{},用来创建一个空表。

以下是Lua的变量的定义方式,区别在于未使用local关键字声明的变量将会是全局变量,而使用了local关键字声明的变量是局部变量,其余的.lua文件将不能顺利地访问。

二、表达式

算术运算符

Lua支持的常规的运算符如下,假设 A = 10, B = 20

操作符 描述 实例
+ 加法 A + B 输出结果 30
- 减法 A - B 输出结果 -10
* 乘法 A * B 输出结果 200
/ 除法 B / A w输出结果 2
% 取余 B % A 输出结果 0
^ 乘幂 A^2 输出结果 100
- 负号 -A 输出结果v -10

Hint: 这儿的 ^是右结合运算符,即 2^3^2 结果为 512 而不是 81

关系运算符

下表列出了 Lua 语言中的常用关系运算符,同样设定 A = 10, B = 20

操作符 描述 实例
== 等于,检测两个值是否相等,相等返回 true,否则返回 false (A == B) 为 false。
~= 不等于,检测两个值是否相等,相等返回 false,否则返回 true (A ~= B) 为 true。
> 大于,如果左边的值大于右边的值,返回 true,否则返回 false (A > B) 为 false。
< 小于,如果左边的值大于右边的值,返回 false,否则返回 true (A < B) 为 true。
>= 大于等于,如果左边的值大于等于右边的值,返回 true,否则返回 false (A >= B) 返回 false。
<= 小于等于, 如果左边的值小于等于右边的值,返回 true,否则返回 false (A <= B) 返回 true。

逻辑运算符

下表列出了 Lua 语言中的常用逻辑运算符,设定 A = true, B = false

操作符 描述 实例
and 逻辑与操作符。 若 A 为 false,则返回 A,否则返回 B。 (A and B) 为 false。
or 逻辑或操作符。 若 A 为 true,则返回 A,否则返回 B。 (A or B) 为 true。
not 逻辑非操作符。与逻辑运算结果相反,如果条件为 true,逻辑非为 false。 not(A and B) 为 true。

代码示例

其他运算符

即连接运算符与计算表或字符串长度的运算符如下表

操作符 描述 实例
.. 连接两个字符串 a..b ,其中 a 为 "Hello " , b 为 "World", 输出结果为 "Hello World"。
# 一元运算符,返回字符串或表的长度。 #"Hello" 返回 5

示例

运算符优先级

LUa这个操作符的优先级由高到低如下表

oper level
^ 8
not - (unary) 7
* / % 6
+ - 5
.. 4
< > <= >= ~= == 3
and 2
or 1

Hint: 除了^和..外所有的二元运算符都是左连接的。

代码示例

table构造式

table作为lua中唯一的数据结构,还是有点意思的,构造式就是用于创建和初始化table的表达式

最简单的就是一个空构造式{}

按照风格划分,lua的table构造式大致可以分为如下两种

当然两种风格在实际的使用中经常混用,这个是完全没有问题的,记录风格的访问类似于C中结构体一样访问,比如 a.x,列表风格就和数组一样的访问形式

三、语句

赋值语句

赋值的基本含义就是指修改一个变量和table中的字段的值(在lua中没有经过复赋值的变量,默认值都是 nil

a = "hello" .. "world"

t.n = t.n + 1

此外,Lua还支持“多重赋值”,每个变量由 ,分隔,如 a, b = 10, 2*x

在多重赋值中,Lua会先对等号右边的所有元素求值,然后才执行赋值,并且赋值讲究 多弃少补 的原则,数量多余的舍弃,数量不足用 nil赋值,比如下列语句都是合法的

局部变量与块

相对与全局变量lua还提供了局部变量,用关键字 local来创建,作用域仅限于申明他们的那个块,一个块可以是一个控制结构的执行体,或者是函数的执行体或者是一个程序块,这一点和其他的变成语言并没有什么不同。

当然尽可能的使用局部变量是一个好的编程习惯,可以有效避免将一些无用的变量名称引入全局环境,避免了搞乱全局环境。

控制结构

在lua中有以下几种控制结构,是编程语言这些都大同小异,下面就直接以代码例程形式给出了

if then else 先对if条件求值,根据测试结果执行 then或者else部分

while 和其他语言一样,Lua先测试while的条件,直到条件为假才终止,否则循环执行循环体之内的代码

repeat 和它的名字一样,一条 repeat-until语句重复执行循环体直到条件为真时结束

数字型for&泛型for

breakreturn

结语

关于函数这些,lua的库这些就在以后的博客中,在介绍吧,这篇博客就酱紫,好吧 Orz--逃~~

繁夜

发表评论


头像速览

:[傲慢]::[白眼]::[鄙视]::[擦汗]::[呲牙]::[大兵]::[得意]::[发呆]::[发怒]::[奋斗]::[鼓掌]::[哈欠]::[憨笑]::[坏笑]::[惊讶]::[可爱]::[可怜]::[酷]::[困]::[冷汗]::[流汗]::[流泪]::[难过]::[撇嘴]::[敲打]::[色]::[衰]::[偷笑]::[微笑]::[吓]::[疑问]::[阴险]::[晕]::[咒骂]::[菜刀]::[玫瑰]::[凋谢]::[礼物]::[拥抱]::[炸弹]::[强]::[弱]::[握手]: