当前位置:网站首页>Lua语法讲解
Lua语法讲解
2022-06-26 03:54:00 【ha_lydms】
文章目录
一、简介
Lua 是⼀个⼩巧的脚本语⾔。它是巴⻄⾥约热内卢天主教⼤学(Pontifical Catholic University of Rio de Janeiro)⾥的⼀个由Roberto Ierusalimschy、Waldemar Celes 和 Luiz Henrique de Figueiredo三⼈所组成的研究⼩组于1993年开发的。 其设计⽬的是为了通过灵活嵌⼊应⽤程序中从⽽为应⽤程序提供灵活的扩展和定制功能。Lua由标准C编写⽽成,⼏乎在所有操作系统和平台上都可以编译,运⾏。Lua并没有提供强⼤的库,这是由它的定位决定的。所以Lua不适合作为开发独⽴应⽤程序的语⾔。Lua 有⼀个同时进⾏的JIT项⽬,提供在特定平台上的即时编译功能。
简单来说:
Lua 是⼀种轻量⼩巧的脚本语⾔,⽤标准C语⾔编写并以源代码形式开放, 其设计⽬的是为了嵌⼊应⽤程序中,从⽽为应⽤程序提供灵活的扩展和定制功能。
lua语⾔具有以下特性
- ⽀持⾯向过程(procedure-oriented)编程和函数式编程(functional programming);
- ⾃动内存管理;只提供了⼀种通⽤类型的表(table),⽤它可以实现数组,哈希表,集合,对象;
- 语⾔内置模式匹配;闭包(closure);函数也可以看做⼀个值;提供多线程(协同进程,并⾮操作系统所⽀持的线程)⽀持;
- 通过闭包和table可以很⽅便地⽀持⾯向对象编程所需要的⼀些关键机制,⽐如数据抽象,虚函数,继承和重载等。
二、lua安装
yum install -y gcc
yum install libtermcap-devel ncurses-devel libevent-devel readline-devel
curl -R -O http://www.lua.org/ftp/lua-5.3.5.tar.gz
tar -zxf lua-5.3.5.tar.gz
cd lua-5.3.5
make linux test
make install
三、快速入门
创建hello.lua文件
touch hello.lua
在文件中添加
print("hello");
执行lua命令
lua hello.lua
四、基本语法
- lua有交互式编程和脚本式编程。
- 交互式编程就是直接输⼊语法,就能执⾏。
- 脚本式编程需要编写脚本,然后再执⾏命令 执⾏脚本才可以。⼀般采⽤脚本式编程。(例如:编写⼀个hello.lua的⽂件,输⼊⽂件内容,并执⾏lua hell.lua即可)
1、注释
⼀⾏注释:两个减号是单⾏注释:
--
多行注释:
--[[
多行注释
多行注释
--]]
2、关键字
| and | break | do | else |
|---|---|---|---|
| elseif | end | false | for |
| function | if | in | local |
| nil | not | or | repeat |
| return | then | true | until |
| while |
3、变量
全局变量/局部变量。默认定义的变量就是全局变量。如果要使用局部变量,需要local来定义。
如果变量没有初始化:则它的值为nil。Java 中null不同。
-- 全局变量赋值
a = 1
-- 局部变量
local b = 2
4、Lua中的数据类型
Lua是动态类型语言,变量不需要类型定义,只需要为变量赋值。值可以存储在变量中,作为参数传递或结果返回。
Lua中有8种基本类型,分别为:nil、boolean、number、string、userdata、function、thread、table。
| 数据类型 | 描述 |
|---|---|
| nil | 这个最简单,只有值nil属于该类,表示⼀个⽆效值(在条件表达式中相当于false)。 |
| boolean | 包含两个值:false和true。 |
| number | 表示双精度类型的实浮点数 |
| string | 字符串由⼀对双引号或单引号来表示 |
| function | 由 C 或 Lua 编写的函数 |
| userdata | 表示任意存储在变量中的C数据结构 |
| thread | 表示执⾏的独⽴线路,⽤于执⾏协同程序 |
| table | Lua 中的表(table)其实是⼀个"关联数组"(associative arrays),数组的索引可以是数字、字符串或表类型。在 Lua ⾥,table 的创建是通过"构造表达式"来完成,最简单构造表达式是{},⽤来创建⼀个空表。 |
5、流程控制
类似if、else
-- [0 为 true]
if (0) then
print("0 为 true")
else
print("0 不为 true")
end
6、函数控制
lua也可以定义函数,类似于java中方法
--[[ 函数返回两个值的最大值 ]]
function max(num1 , num2)
if(num1 > num2) then
result = num1;
else
result = num2;
end
return result;
end
-- 调用函数
print("两值比较最大值为 ",max(10,4))
print("两值比较最大值为 ",max(5,6))
7、require 引用函数
require用于引入其它的模块。
8、定义数组
local props = {
host = "192.168.200.128",
port = 3306,
database = "root",
password = "123456"
}
9、Nginx中配置执行lua
指定某页面,去执行lua程序
location /ad_update {
content_by_lua_file /root/lua/ad_update.lua;
}
10、其它语法
-- 关闭数据库连接(调用方法)
db:close
-- 定义全局变量
ngx.header.content_type="application/json;charset=utf-8"
-- 定义局部变量
local cjson = require("cjson")
-- 定义局部数据
local position = uri_args["position"]
-- 引入包
local redis = require("resty.redis")
-- 连接Redis
red:connect(ip,port)
边栏推荐
- 用eclipse连mysql数据库出错然后出现图中的话是咋回事呀
- ipvs之ipvs0网卡
- QPS的概念和实现
- ABP framework Practice Series (II) - Introduction to domain layer
- Quanergy welcomes Lori sundberg as chief human resources officer
- [Flink] Flink source code analysis - creation of jobgraph in batch mode
- Dynamic segment tree leetcode seven hundred and fifteen
- 2022.6.23-----leetcode.30
- I/o virtualization technology - UIO framework
- . Net core learning journey
猜你喜欢

Uni app custom selection date 1 (September 16, 2021)

【LOJ#6718】九个太阳「弱」化版(循环卷积,任意模数NTT)

Non H5 end of uni app, regional setting of status bar on the top of mobile phone

Open camera anomaly analysis (I)

Detr3d multi 2D picture 3D detection framework

【Flink】Flink源码分析——批处理模式JobGraph的创建

High performance computing center roce overview
![MySQL advanced Chapter 1 (installing MySQL under Linux) [2]](/img/24/0795ebd2a0673d48c5e0f9d18842d1.png)
MySQL advanced Chapter 1 (installing MySQL under Linux) [2]
![[LOJ 6718] nine suns' weakened version (cyclic convolution, arbitrary modulus NTT)](/img/fd/0c299b7cc728f2d6274eea30937726.png)
[LOJ 6718] nine suns' weakened version (cyclic convolution, arbitrary modulus NTT)

Use soapUI to access the corresponding ESB project
随机推荐
动态线段树leetcode.715
外包干了四年,人直接废了。。。
【Flink】Flink源码分析——批处理模式JobGraph的创建
I/O 虚拟化技术 — VFIO
An error occurred using the connection to database 'on server' 10.28.253.2‘
【MySQL】 MySQL 导出数据库
[LOJ 6718] nine suns' weakened version (cyclic convolution, arbitrary modulus NTT)
Unity移动端游戏性能优化简谱之 以引擎模块为划分的CPU耗时调优
Uni app custom selection date 1 (September 16, 2021)
WPF 值转换
Part 4: drawing quadrilateral
2022.6.24-----leetcode. five hundred and fifteen
R语言与机器学习
matplotlib折线图,文字显示,win10
763. dividing alphabetic intervals
ABP framework Practice Series (II) - Introduction to domain layer
Non H5 end of uni app, regional setting of status bar on the top of mobile phone
TiFlash 函数下推必知必会丨十分钟成为 TiFlash Contributor
而是互联网开始有了新的进化,开始以一种全新的状态出现
Webrtc series - 7-ice supplement of network transmission preference and priority