You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

227 lines
4.8 KiB
Markdown

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

- 使用 Lua 脚本
- 轻量级: Lua用标准C语言编写并以源代码形式开发编译后仅仅一百余千字节可以很方便的嵌入到其他程序中。
- 可扩展: Lua提供非常丰富易于使用的扩展接口和机制由宿主语言(通常是C或C++)提供功能Lua可以使用它们就像内置的功能一样。
- 支持面向过程编程和函数式编程
- 应用场景
- 游戏开发、独立应用脚本、web应用脚本、扩展和数据库插件、系统安全上。
- 安装
- Lua的官网地址为:`https://www.lua.org`
- 点击download可以找到对应版本的下载地址我们本次课程采用的是lua-5.3.5,其对应的资源链接地址为https://www.lua.org/ftp/lua-5.4.1.tar.gz,也可以使用wget命令直接下载:
```shell
# 下载 gz 安装包
wget https://www.lua.org/ftp/lua-5.4.1.tar.gz
# 安装需要的依赖
yum install -y readline-devel
# 编译安装
cd lua-5.4.1
make linux test
make install
# 验证安装
lua -v
```
- Lua的语法
- Lua交互式编程模式可以通过命令lua -i 或lua来启用:
- 脚本文件以 .lua 结尾
- 举例:
```shell
#!/usr/local/bin/lua
print("Hello World!!!")
```
- 第一行用来指定Lua解释器所在位置为 /usr/local/bin/lua加上#号标记解释器会忽略它。
- 一般情况下#!就是用来指定用哪个程序来运行本文件。但是hello.lua并不是一个可执行文件需要通过chmod来设置可执行权限最简单的方式为:
```shell
chmod 755 hello.lua
```
- 然后执行该文件
```shell
./hello.lua
```
- 补充一点如果想在交互式中运行脚本式的hello.lua中的内容我们可以使用一个dofile函数
```shell
dofile("lua_demo/hello.lua")
```
- 注意:在Lua语言中连续语句之间的分隔符并不是必须的也就是说后面不需要加分号当然加上也不会报错
- 在Lua语言中表达式之间的换行也起不到任何作用。如以下四个写法其实都是等效的
```txt
写法一
a=1
b=a+2
写法二
a=1;
b=a+2;
写法三
a=1; b=a+2;
写法四
a=1 b=a+2
```
- 不建议使用第四种方式,可读性太差。
### 1.1 Lua的注释
- 关于Lua的注释要分两种第一种是单行注释第二种是多行注释。
- 单行注释
```shell
--注释内容
```
- 多行注释
```shell
--[[
注释内容
注释内容
--]]
```
- 取消多行注释,只需要在第一个--之前在加一个-即可,如:
```shell
---[[
注释内容
注释内容
--]]
```
### 1.2 标识符
- 换句话说标识符就是我们的变量名Lua定义变量名以一个字母 A 到 Z 或 a 到 z 或下划线 _ 开头后加上0个或多个字母下划线数字0到9
- 这块建议大家最好**不要使用下划线加大写字母的标识符**因为Lua的保留字也是这样定义的容易发生冲突。注意Lua是区分大小写字母的。
### 1.3 关键字
- 下列是Lua的关键字大家在定义常量、变量或其他用户自定义标识符都要避免使用以下这些关键字
| 关键词 | 关键词 |
|----------|--------|
| and | break |
| elseif | end |
| function | if |
| nil | not |
| return | then |
| while | goto |
| do | else |
| false | for |
| in | local |
| or | repeat |
| true | until |
- 一般约定,以下划线开头连接一串大写字母的名字(比如 _VERSION被保留用于 Lua 内部全局变量。这个也是上面我们不建议这么定义标识符的原因。
### 1.3 运算符
```txt
+ 加法
- 减法
* 乘法
/ 除法
% 取余
^ 乘幂
- 负号
```
---
```txt
10+20 -->30
20-10 -->10
10*20 -->200
20/10 -->2
3%2 -->1
10^2 -->100
-10 -->-10
```
- 关系运算符
```txt
== 等于
~= 不等于
> 大于
< 小于
>= 大于等于
<= 小于等于
```
- 例如:
```txt
10==10 -->true
10~=10 -->false
20>10 -->true
20<10 -->false
20>=10 -->true
20<=10 -->false
```
- 逻辑运算符
```txt
and 逻辑与 A and B &&
or 逻辑或 A or B ||
not 逻辑非 取反如果为true,则返回false !
```
- 逻辑运算符可以作为if的判断条件返回的结果如下:
```txt
A = true
B = true
A and B -->true
A or B -->true
not A -->false
A = true
B = false
A and B -->false
A or B -->true
not A -->false
A = false
B = true
A and B -->false
A or B -->true
not A -->true
```
- 其他运算符
```txt
.. 连接两个字符串
# 一元预算法,返回字符串或表的长度
```
- 例如:
```txt
> "HELLO ".."WORLD" -->HELLO WORLD
> #"HELLO" -->5
```
### 1.4 全局变量&局部变量
- 在Lua语言中全局变量无须声明即可使用。在默认情况下变量总是认为是全局的如果未提前赋值默认为nil:
- 要想声明一个局部变量需要使用local来声明