Lua介绍

Lua 是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放, 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。

Lua 是巴西里约热内卢天主教大学(Pontifical Catholic University of Rio de Janeiro)里的一个研究小组于 1993 年开发的,该小组成员有:Roberto Ierusalimschy、Waldemar Celes 和 Luiz Henrique de Figueiredo。

Lua 不是一门很难的语言,即使是没有学习过 lua 的前端工程师,凭借着 js 中的语法和知识也可以看懂大部分的 lua 代码逻辑。

之所以学习 lua 是为了之后学习 openrestry 打基础,学习如何开发 api网关

环境搭建

Lua安装

首先进入lua 官网提供的下载地址 ,选择你当前对应的环境点击即可下载。

我选择的是 Win64_bin 的包,下载完成后压缩包内内容如下:

我们将压缩包解压到任意文件夹中,解压后记得将 三个exe后缀文件名的文件中数字部分去掉 !然后根据解压的目录配置环境变量。

win10 用户可以跟我一样直接搜索 高级系统设置 ,打开后选择右下角 环境变量 按钮。

在系统变量这里,选择 Path 点击右下角编辑。

点击右侧 新建,将刚刚 解压lua的路径 输入并保存

然后我们打开命令行输入 lua 查看安装结果,如果安装成功了就会打印版本信息,并且进入输入模式,如下图所示:

ide工具

作为一个前端工程师,我是直接使用 vscode 作为 ide 工具,在 vscode 中安装 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 的创建是通过"构造表达式"来完成,最简单构造表达式是{},用来创建一个空表。

nil 类型

nil 类型我的理解就是类似于 js 中的 null + undefined ,在条件表达式中也同样相当于false, 可以表示为未定义的值。同样可以用于释放内存。

boolean 类型

boolean 类型与 js 有一些区别,除了 falsenil 之外,其他都是 true ,在 JS 中条件判断时等于false的 数字0空字符’’ 在 lua 中都是 ture 。

number 类型

number类型和 js 一样,都是 double(双精度) 类型,可以同时表达整数,小数等。

string 类型

string 类型和 js 中不同的点是,在 js 中数字字符串与数字做加法时,会将字符串拼接起来,而 lua 中则会转换类型。

> print("2" + 6)\
8.0

table 类型

table 类型 可能看起来比较陌生,其实就是 js 中的 Object 类型 + Array 类型,使用大括号定义变量,变量中传入值会自动生成索引,但是索引的值不仅可以是数字,还可以是字符串,更接近于js中的 Map类型

local tbl2 = {"apple", "pear", "orange", "grape"}

调用属性时,使用中括号进行调用,使用方式如下:

local table = {"apple", "pear", "orange", "grape"}
print(table[1]) --"apple"

function 类型

在 lua 中定义函数函数体是不需要用大括号框住的,而是在函数的末尾使用一个 end 将函数体包起来

function test()print("i'm a function")
endtest() --"i'm a function"

与 js 一样,函数同样可以赋值给变量

local test = function()print("i'm a function")
endtest() --"i'm a function"

函数中还有很多类似 js 的小技巧,例如 参数解构,闭包函数 等,后面单独写一篇~

userdata 类型

userdata 是一种用户自定义数据,用于表示一种由应用程序或 C/C++ 语言库所创建的类型,可以将任意 C/C++ 的任意数据类型的数据(通常是 struct 和 指针)存储到 Lua 变量中调用。

Lua 注释写法

单行注释

两个减号是单行注释:

local a = "hello" --定义变量

多行注释

两个括号用于多行注释

--[[所有内容都被注释--]]

定义变量

lua 和 js 一样是一门 弱类型语言,因此在定义变量时不需要指定变量类型,可以直接赋值定义全局变量或使用 local定义局部变量,类比于js中的 varlet

a = 5               -- 全局变量\
local b = 5         -- 局部变量\function joke()\c = 5           -- 全局变量\local d = 6     -- 局部变量\
end

局部变量只能作用在块级作用域,例如 函数遍历 或者 条件判断 中。

条件判断

if...else... 语法中与 js 不同的一点是,js 是 if 包裹着判断为 true 的操作,else 包裹着判断为false 的操作,而 lua 是用 if 和 end 包裹整个条件判断语句,然后判断为 true 的话就走 then 中的操作,
否则走 else

--[ 定义变量 --]\
a = 100;\
--[ 检查条件 --]\
if( a < 20 )\
then\--[ if 条件为 true 时执行该语句块 --]\print("a 小于 20" )\
else\--[ if 条件为 false 时执行该语句块 --]\print("a 大于 20" )\
end\
print("a 的值为 :", a)

在 Lua 中是没有 switch... case... ,不过可以使用 table 类型实现相似的功能,将 table 数据的值设置为想要执行的 函数,通过匹配 key 值实现 switch... case...

local SwitchCase = function (value)local caseTable = {["a"] = function ()print("a")end,["b"] = function ()print("a")end,["c"] = function ()print("a")end,}caseTable[value]()
end
SwitchCase("a") --"a"

Lua 遍历

在学习遍历前,首先我们要了解 Lua 中可以迭代的值有什么,在上一篇文章中,我们讲到了 Lua 中有一个类似 js 中 对象+数组 的类型 table ,table 这个类型是不能直接用于遍历的,但是我们可以对 table 进行一些处理,就像 js 中的对象方法 Object.entries() 可以将对象转换为数组一样,Lua 中也存在类似的函数 ipairspairs

在 Lua 中 for遍历的写法与 js 的 for...in... 相似,只不过是将大括号改成用 do…end… ,如下代码所示:

array = {"Google", "Runoob"}for key,value in ipairs(array)
doprint(key, value)
end[[1       Google2       Runoob
]]

这里要注意一下,在 Lua 中索引值是以 1 为起始的,不像其他语言第一个索引值是 0

pairsipairs 两个函数之间是有区别的,ipairs 函数如果在遍历的时候遇到了 nil 就会退出遍历!具体区别如下:

  • pairs: 迭代 table,可以遍历表中所有的 key 可以返回 nil
  • ipairs: 迭代数组,不能返回 nil,如果遇到 nil 则退出

Lua 循环

上面的将的是我们如何遍历一个 table 数据,如果我们只是想单纯的进行循环,那么我们可以直接使用 for循环 ,如下代码所示:

for i=1,5 doprint(i)
end
[[12345
]]

对应的 js 代码如下:

for (let i = 1; i <= 5; i++) {console.log(i)
}

上面的代码就是循环 5 次打印的结果,具体的循环语法如下所示:

for var=exp1,exp2,exp3 do  print(exp1)
end

var 从 exp1 变化到 exp2,每次变化以 exp3 为步长递增 var,并执行一次 “执行体” 。exp3 是可选的,如果不指定,默认为1。转换为 js 的代码可能看的更加直观,这里的 var 单纯代表一个具体的变量,而不是js中用于创建变量的语法 var:

for (var = exp1; exp2 <= 5; var + exp3) {console.log(var)
}

总结

这篇文章主要讲了 lua 在windows中开发环境的搭建以及一些数据类型介绍及入门语法,整体文章面向群体偏向于有前端开发基础的学习者。

前端开发从零开始学Lua-开发环境搭建及基础语法介绍(对照JS)相关推荐

  1. 从零开始学 Python 之环境搭建

    其实 Python 已经是一个很老的编程语言了,到现在(2019年) Python 已经高龄 28 岁,比很多程序员的年龄都大.现在之所以这么流行和社区.人工智能的发展,有很大的关系. 千里之行始于足 ...

  2. Linux环境搭建和基础指令介绍

    目录: 一:环境搭建 二:基础指令介绍 三:Linux权限 一:环境搭建 搭建linux环境主要用到俩个工具,一个是Linux镜像,一个是远程终端软件. Linux镜像选择: 1.实惠选择:安装一个虚 ...

  3. 1、python开发环境搭建与基础语法

    文章目录 python解释器 PyCharm编辑器 基础语法 变量 运算符 基本数据类型 常见数学运算符 常见赋值运算符 关系运算符(返回值为bool类型) 逻辑运算符 数据的输入和输出 输入inpu ...

  4. 《HTML5+CSS3+JavaScript前端开发从零开始学(视频教学版)》简介

    #好书推荐##好书奇遇季#<HTML5+CSS3+JavaScript前端开发从零开始学(视频教学版)>,京东当当天猫都有发售.定价69元.本书配套本书配套示例源代码.PPT课件与同步教学 ...

  5. JSP开发的工具下载与环境搭建(Windows开发环境)

    一.JSP开发的工具下载与环境搭建 JSP技术的强势: (1)一次编写,到处运行.在这一点上Java比PHP更出色,除了系统之外,代码不用做任何更改. (2)系统的多平台支持.基本上可以在所有平台上的 ...

  6. 菜鸟学C语言-环境搭建

    菜鸟学C语言-环境搭建 本人由于工作需要,需要用C写一套程序,虽然以前看过一两本C的书,但是时隔几年早已忘得一干二净,所以相当于是需要从头开始学习,在此记录一下我得学习成果 环境所需工具 window ...

  7. nginx整合php+lua+oracle环境搭建

    nginx整合php+lua+oracle环境搭建 标签: nginxluaoraclephplinux 2014-09-25 10:39 1473人阅读 评论(0) 收藏 举报  分类:   技术( ...

  8. ROS Qt环境的搭建及基础知识介绍

    ROS Qt环境的搭建及基础知识介绍 文章目录 ROS Qt环境的搭建及基础知识介绍 1. 开发环境搭建 1.1 qtcreator安装 1.2 catkin_create_qt_pkg环境配置 1. ...

  9. 从零开始学JAVA:二、Java基本语法(四)——流程控制

    从零开始学JAVA:二.Java基本语法(四)--流程控制 程序流程控制 1.顺序结构 2.分支结构 2.1.if-else结构 2.2.switch-case选择结构 2.3.Scanner类的使用 ...

最新文章

  1. R语言卡方分布函数Binomial Distribution(dchisq, pchisq, qchisq rchisq)实战
  2. Verilog中for 语句怎么用
  3. 数据结构-栈(C语言代码)
  4. 哪种代理适合用于Web数据采集
  5. opcua客户端实现断线重连_PLCopen amp; OPC UA信息模型
  6. 【GIT 基础篇六】分支管理(创建与合并)
  7. 开发中常遇到的linux系统配置操作整理
  8. 权限不足_十分钟掌握Linux文件属性及权限操作,不再担心权限不足!
  9. java中怎么判断字符相等_Java中如何判断两个字符串相等
  10. 从集合(内存)中创建RDD
  11. Http实战之Wireshark抓包分析
  12. 喜马拉雅 FM 已购付费音频下载
  13. Dynamics CRM 审批流引擎
  14. 叶问【转自知数堂微信公众号】
  15. 各版本VOS服务的停止、启动和重启命令详解
  16. java重命名_java实现文件重命名的方法
  17. ElasticSearch 中文分词器ik的安装、测试、使用、自定义词库、热更新词库
  18. layui table勾选框的修改_Layui默认选中table的CheckBox复选框方法_飛雲_前端开发者...
  19. 自锁时间电路plc_起动、自锁和停止控制的PLC线路与梯形图
  20. flume的source测试赫赫有名

热门文章

  1. 原子类型:AtomicInteger认识
  2. 干货|如何做有效的代码走查
  3. 从0开始学股票进阶课之如何寻找热点板块
  4. python智能写作_四个月技术写作,我写了些什么?
  5. 全功能WebRTC应用程序AppRTC应用服务阿里云搭建测试总结并docker化提供镜像
  6. 【并发】ReentrantLock中公平锁和非公平锁的理解
  7. 公平锁和非公平锁有什么区别
  8. 计算机应用基础问卷调查,计算机应用基础调查问卷.docx
  9. 新版本的targetSdkVersion低于当前用户或者其他用户下的安装版本。。。
  10. 第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-1007 印章