Lua语言新手简单入门教程
一、前言
Lua 是一种轻量小巧的脚本语言,用标准 C 语言编写并以源代码形式开放,其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。
Lua 可以应用在游戏开发、独立应用脚本、Web 应用脚本、扩展和数据库插件、安全系统等场景。
笔者学习的目的主要是为了能在 Web 应用(Nginx、Redis)中使用到 Lua 脚本。
特点
- Lua脚本可以很容易的被C/C++ 代码调用,也可以反过来调用C/C++的函数。
- Lua由标准C编写而成,代码简洁优美,几乎在所有操作系统和平台上都可以编译,运行。
- 以极小的体积和简单的语法提供全面的功能。[一个完整的Lua解释器不过200k,在目前所有脚本引擎中,Lua的速度是最快的]
- 实现与宿主语言的简洁接口
- 成为一个很容易嵌入其它语言中使用的语言。
特性
- 支持面向对象编程
- 轻量级
- 可扩展
- 函数式编程
- 自动内存管理
- 通用类型的表–table,可实现数组,哈希表,集合,对象
- 支持闭包
- 支持多线程
- 支持交互式编程
二、安装
注意:请确保安装 Lua 之前系统已安装 readline 和 readline-devel。如果没有则键入 yum install -y readline readline-devel
进行安装。
curl -R -O http://www.lua.org/ftp/lua-5.3.4.tar.gz tar zxf lua-5.3.4.tar.gz cd lua-5.3.4 make linux test
测试,命令行中键入 lua -v:
Lua 5.1.4 Copyright (C) 1994-2008 Lua.org, PUC-Rio
显示 Lua 版本说明安装正确。
三、运行方式
与其他脚本语言一样,我们需要将 Lua 代码编写在文件中,后缀名为 .lua。
运行该文件的代码时,只需在命令行键入 lua xx.lua 即可。
四、语法
4.1 数据类型
Lua 中包含 8 种基本数据类型,即:nil、boolean、number、string、userdata、function、thread 和 table。
数据类型 | 说明 |
---|---|
nil | 表示无效值,在条件表达式中表示 false。 |
boolean | 布尔值,包含 true 和 false 两个值。 |
number | 表示双精度类型的实浮点数。 |
string | 表示字符串,通过双引号或单引号括住。 |
userdata | 表示任意存储在变量中的 C 数据结构 |
function | 表示 C 或 Lua 编写的函数 |
thread | 表示执行的独立线程,用于执行协同程序。 |
table | 表示一个关联数组,数组索引可以是数字或字符串。 |
例如:
a=10 str="hello world"
不需要声明变量类型,我们可以通过 type() 判断变量类型。
注意:
Lua 变量有三种类型:全局变量、局部变量和表中的域;
默认情况下,不管在哪声明的变量都是全局变量。通过 local 修饰的变量为局部变量;
变量默认值为 nil。
4.2 运算符
1) 赋值运算符
str="hello".."world" -- 通过 .. 连接字符串 a,b=10,15 -- a=10,b=15 c,d,e=1,2 -- c=1,b=2,e=nil
2) 算术运算符
与其他程序设计语言类似。
a,b=10,15 c=a+b -- 加号 d=a-b -- 减号 e=a*b -- 乘号 f=a/b -- 除号 g=a%b -- 求余 h=a^2 -- 求乘方 i=-a -- 负号
3) 关系运算符
与其他程序设计语言类似。
a,b=10,15 print(a>b) -- 大于 print(a<b) -- 小于 print(a==b) -- 等于 print(a~=b) -- 不等于
4) 逻辑运算符
print(true and false) -- 与 print(true or false) -- 或 print(not true) -- 非
5) 其他运算符
操作符 | 说明 |
---|---|
.. | 连接两个字符串 |
# | 返回字符串或表的长度,如 #“lua” |
4.3 流程控制
1) 条件判断,有 3 种写法。
-- if 语句 if(true) then print("hello") end -- if .. else 语句 a,b=10,15 if(a>b) then print(a) else print(b) end -- if 嵌套 c=20 if(c>10) then if(c<30) then print(c) end end
2) 循环,有 4 种写法。
类型 | 说明 |
---|---|
while 循环 | 在条件为 true 时,让程序重复执行语句。 |
for 循环 | 重复执行指定语句,重复次数在 for 中控制。可以遍历数字和泛型。 |
repeat .. until | 重复执行循环,直到指定条件为真为止。 |
循环嵌套 | 循环内嵌套多个循环语句。 |
例如:
-- while 循环 a=10 while(a>0) do print(a) a=a-1 end -- for 循环,遍历数字 for a=1,10,1 do print(a) end -- repeat .. until 循环 a=10 repeat print(a) a=a-1 until(a<1)
4.4 数组
Lua 数组大小不固定且下标从 1 开始。
arr={"h","e","l","l","o"} -- 此处使用遍历数字方式 for index=1,#arr do print(arr[index]) end -- 此处使用遍历泛型方式 for i,v in ipairs(arr) do print(i,v) end
4.5 函数
-- 案例 1 function calc(a,b,c) return a+b+c end result=calc(1,2,3) print(result) -- 案例 2 function getCalc(a,b,c) return a,b,c end r1,r2,r3=getCalc(1,2,3) print(r1,r2,r3)
Lua 中的函数允许返回多个值。
4.6 table
table 是 Lua 中的一个数据结构,类似于 Java 中的 Map 类型或 Javascript 中的 JSON 对象。
Lua table 使用关联数组,我们可以使用任意类型值作为数组的索引,但不能是 nil。
Lua table 大小不固定。
person={} person.name="jack" person.age=20 print(person[1]) print(person.name) print(person["age"])
4.7 模块和包
模块类似于一个封装库。从 Lua 5.1 开始,Lua 加入标准的模块管理机制,可以将一些公用的代码放在一个文件中,以 API 接口的形式在其他地方调用,有利于代码的重用和降低代码耦合。
Lua 的模块由变量、函数等已知元素组成的 table 。
例如:
创建名为 module.lua 的文件。
module={} module.index=1 function module.sum(a,b) return a+b end
另一个文件引入:
-- 此处 module 是文件名 require "module" -- 此处 module 是引入模块中定义的名称 print(module.index) print(module.sum(1,2))
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对猪先飞的支持。
相关文章
- 这篇文章主要给大家介绍的是关于Lua语言新手入门的简单教程,文中通过示例代码一步步介绍的非常详细,对各位新手们的入门提供了一个很方便的教程,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧。...2020-06-30
- 最近在工作中遇到了一个问题,通过查找相关资料才得知原因是因为返回结果的问题,下面这篇文章主要给大家介绍了关于lua读取redis数据的null判断的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下...2020-06-30
- 这篇文章主要介绍了C#线程入门教程之单线程介绍,本文讲解了什么是进程、什么是线程、什么是多线程等内容,并给出了一个单线程代码示例,需要的朋友可以参考下...2020-06-25
- 这篇文章主要介绍了Lua判断变量是否为数字、字符串是否可以转换为数字等,本文讲解了Lua 判断是字符还是数字的方法、Lua判断数字的方法、判断可否转换为数字的方法、判断并且准备一个初值的方法,需要的朋友可以参考下...2020-06-30
- 这篇文章主要介绍了CocosCreator入门教程之用TS制作第一个游戏,对TypeScript感兴趣的同学,一定要看一下...2021-04-16
- 这里主要讲到关于在php教程类的调用,申请明,使用以前各种类的实例方法与操作过程,让你清楚的知道php类的construct destruct clone call wake sleep用法。 简单购物车...2016-11-25
- 今天小编就为大家分享一篇关于Lua流程控制语句if else的使用示例,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧...2020-06-30
Lua的table库函数insert、remove、concat、sort详细介绍
这篇文章主要介绍了Lua的table库函数insert、remove、concat、sort详细介绍,本文分别给出了这几个函数的使用实例,需要的朋友可以参考下...2020-06-30- 这篇文章主要介绍了Lua中的模块(module)和包(package)详解,本文讲解了require函数、写一个模块、package.loaded、module函数等内容,需要的朋友可以参考下...2020-06-30
- 下面举一个很简单的?表达式的实现吧,其实它就是简单的if else哦。 <? $a = 5; //定义变数a=5 $b = 3; //定义变数b=5 $c = ($a==$b) ? ("yes") : ("no"); //如果...2016-11-25
Lua中的loadfile、dofile、require详解
这篇文章主要介绍了Lua中的loadfile、dofile、require详解,本文分别用实例讲解它的用法和特点等内容,需要的朋友可以参考下...2020-06-30- 现在最热门的前端框架有AngularJS、React、Bootstrap等。自从接触了ReactJS,ReactJs的虚拟DOM(Virtual DOM)和组件化的开发深深的吸引了我,下面来跟我一起领略ReactJs的风采吧~~ 文章有点长,耐心读完,你会有很大收获哦...2021-04-05
- 这篇文章主要给大家介绍了关于如何使用Vim搭建Lua开发环境的相关资料,文中通过图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧...2020-06-30
- 今天小编就为大家分享一篇关于Lua一维数组与多维数组的使用示例,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧...2020-06-30
- php入门教程:php rtrim()实例教程 定义和用法 该rtrim ( )函数将删除空格或其他预先确定的性质从右侧的一个字符串。 语法 rtrim(string,charlist) 参数说明 字符...2016-11-25
- 这篇文章主要介绍了Golang极简入门教程(一):基本概念,本文讲解了Golang的基本知识、基础语法、相关术语等,需要的朋友可以参考下...2020-05-01
- 这篇文章主要介绍了Golang极简入门教程(三):并发支持,本文讲解了goroutine线程、channel 操作符等内容,需要的朋友可以参考下...2020-05-01
- 这篇文章主要介绍了JAVA流程控制语句的的相关资料,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下,希望可以帮到你...2021-07-07
- 定义和用法 该metaphone ( )函数计算metaphone关键的一个字符串。 阿metaphone关键是如何一连串的声音,如果说,由讲英语的人。 该metaphone ( )函数可用于拼写应用...2016-11-25
- table 在lua中是一个非常常用的数据结构,可以用来存放各种类型的元素,下面这篇文章就来给大家介绍了关于lua中神奇的table的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面来一起看看吧...2020-06-30