Lua语言_lua基本语法

Lua语言_lua基本语法1、Lua简介1.1Lua是什么1.2特性1.3应用场景2、Lua的安装3、入门程序4、Lua的基础语法4.1注释4.2定义变量4.3Lua中的数据类型4.4流程控制4.5循环4.6函数4.7表4.8模块1、Lua简介1.1Lua是什么Lua[1]是一个小巧的脚本语言。它是巴西里约热内卢天主教大学(PontificalCatholicUniversityofRiodeJaneiro)里的一个由RobertoIerusalimschy、WaldemarCele.

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

1、Lua简介

1.1 Lua是什么

Lua [1] 是一个小巧的脚本语言。它是巴西里约热内卢天主教大学(Pontifical Catholic University ofRio de Janeiro)里的一个由Roberto Ierusalimschy、Waldemar Celes 和 Luiz Henrique deFigueiredo三人所组成的研究小组于1993年开发的。 其设计目的是为了通过灵活嵌入应用程序中从而为应用程序提供灵活的扩展和定制功能。 Lua由标准C编写而成,几乎在所有操作系统和平台上都可以编译,运行。Lua并没有提供强大的库,这是由它的定位决定的。所以Lua不适合作为开发独立应用程序的语言。Lua 有一个同时进行的JIT项目,提供在特定平台上的即时编译功能。

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

1.2 特性

  • 支持面向过程(procedure-oriented)编程和函数式编程(functional programming);

  • 自动内存管理;只提供了一种通用类型的表(table),用它可以实现数组,哈希表,集合,对象;

  • 语言内置模式匹配;闭包(closure);函数也可以看做一个值;提供多线程(协同进程,并非操作系统所支持的线程)支持;

  • 通过闭包和table可以很方便地支持面向对象编程所需要的一些关键机制,比如数据抽象,虚函数,继承和重载等。

1.3 应用场景

  • 游戏开发
  • 独立应用脚本
  • Web 应用脚本
  • 扩展和数据库插件如:MySQL Proxy 和 MySQL WorkBench
  • 安全系统,如入侵检测系统
  • redis中嵌套调用实现类似事务的功能
  • web容器中应用处理一些过滤缓存等等的逻辑,例如nginx。

2、Lua的安装

有linux版本的安装也有mac版本的安装。。我们采用linux版本的安装,首先我们准备一个linux虚拟机。

安装步骤,在linux系统中执行下面的命令。

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

Jetbrains全家桶1年46,售后保障稳定

注意:此时安装,有可能会出现如下错误:
在这里插入图片描述
此时需要安装lua相关依赖库的支持,执行如下命令即可:

yum -y install gcc gcc-c++ kernel-devel

此时再执行lua测试看lua是否安装成功

[root@localhost ~]# lua
Lua 5.1.4 Copyright (C) 1994-2008 Lua.org, PUC-Rio

3、入门程序

创建hello.lua文件,内容为

vim hello.lua

在文件中输入:

print("hello");

保存并退出。
执行命令

lua hellp.lua

输出为:

Hello

效果如下:
在这里插入图片描述

4、Lua的基础语法

lua有交互式编程脚本式编程

交互式编程就是直接输入语法,就能执行。

脚本式编程需要编写脚本,然后再执行命令 执行脚本才可以。

一般采用脚本式编程。(例如:编写一个hello.lua的文件,输入文件内容,并执行lua hell.lua即可)

(1)交互式编程

Lua 提供了交互式编程模式。我们可以在命令行中输入程序并立即查看效果。
Lua 交互式编程模式可以通过命令 lua -i 或 lua 来启用:

lua -i

如下图:
在这里插入图片描述
(2)脚本式编程

我们可以将 Lua 程序代码保持到一个以 lua 结尾的文件,并执行,该模式称为脚本式编程,例如入门程序中将lua语法写到hello.lua文件中。

4.1 注释

一行注释:两个减号是单行注释

--

多行注释:

--[[
多行注释
多行注释
--]]

4.2 定义变量

全局变量,默认的情况下,定义一个变量都是全局变量,如果要用局部变量 需要声明为local.例如:

-- 全局变量赋值
a=1
-- 局部变量赋值
local b=2

如果变量没有初始化:则 它的值为nil 这和java中的null不同。

如下图案例:
在这里插入图片描述

4.3 Lua中的数据类型

Lua 是动态类型语言,变量不要类型定义,只需要为变量赋值。 值可以存储在变量中,作为参数传递或结果返回。

Lua 中有 8 个基本类型分别为:nil、boolean、number、string、userdata、function、thread 和 table。

在这里插入图片描述
实例:
在这里插入图片描述

4.4 流程控制

(1)if语句

Lua if 语句 由一个布尔表达式作为条件判断,其后紧跟其他语句组成。
语法:

if(布尔表达式)
then
--[ 在布尔表达式为 true 时执行的语句 --]
end

实例:
在这里插入图片描述

(2)if…else语句

Lua if 语句可以与 else 语句搭配使用, 在 if 条件表达式为 false 时执行 else 语句代码块。
语法:

if(布尔表达式)
then
--[ 布尔表达式为 true 时执行该语句块 --]
else
--[ 布尔表达式为 false 时执行该语句块 --]
end

实例:
在这里插入图片描述

4.5 循环

(1)while循环[满足条件就循环 ]

Lua 编程语言中 while 循环语句在判断条件为 true 时会重复执行循环体语句。
语法:

while(condition)
do
statements
end

实例:

a=10
while( a < 20 )
do
print("a 的值为:", a)
a = a+1
end

执行效果
在这里插入图片描述

(2)for循环

Lua 编程语言中 for 循环语句可以重复执行指定语句,重复次数可在 for 语句中控制。
语法: 1->10 1:exp1 10:exp2 2:exp3:递增的数量

for var=exp1,exp2,exp3
do
<执行体>
end

语法解释:var 从 exp1 变化到 exp2,每次变化以 exp3 为步长递增 var,并执行一次 “执行体”。exp3 是可选的,如果不指定,默认为1。

例子:

for i=1,9,2
do
print(i)
end

for i=1,9,2 :i=1从1开始循环,9循环数据到9结束,2每次递增2
在这里插入图片描述

(3)repeat…until语句[满足条件结束]

Lua 编程语言中 repeat…until 循环语句不同于 for 和 while循环,for 和 while 循环的条件语句在当前循环执行开始时判断,而 repeat…until 循环的条件语句在当前循环结束后判断。(与java语法中do…while类似)

语法:

repeat
	statements
until( condition )

案例:
在这里插入图片描述

4.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))

执行之后的结果:

两值比较最大值为 10
两值比较最大值为 6

…:表示拼接

4.7 表

table 是 Lua 的一种数据结构用来帮助我们创建不同的数据类型,如:数组、字典等。

Lua也是通过table来解决模块(module)、包(package)和对象(Object)的。

案例:

-- 初始化表
mytable = {}
-- 指定值
mytable[1]= "Lua"
-- 移除引用
mytable = nil

4.8 模块

(1)模块定义(类似于Java中方法的概念)
模块类似于一个封装库,从 Lua 5.1 开始,Lua 加入了标准的模块管理机制,可以把一些公用的代码放在一个文件里,以 API 接口的形式在其他地方调用,有利于代码的重用和降低代码耦合度。

创建一个文件叫module.lua,在module.lua中创建一个独立的模块,代码如下:

-- 文件名为 module.lua
-- 定义一个名为 module 的模块
module = {}
-- 定义一个常量
module.constant = "这是一个常量
-- 定义一个函数
function module.func1()
	print("这是一个公有函数")
end

local function func2()
	print("这是一个私有函数!")
end

function module.func3()
	func2()
end

return module

由上可知,模块的结构就是一个 table 的结构,因此可以像操作调用 table 里的元素那样来操作调用模块里的常量或函数。

上面的 func2 声明为程序块的局部变量,即表示一个私有函数,因此是不能从外部访问模块里的这个私有函数,必须通过模块里的公有函数来调用。

(2)require 函数

require 用于 引入其他的模块,类似于java中的类要引用别的类的效果。
用法:

require("<模块名>")
require "<模块名>"

两种都可以。

我们可以将上面定义的module模块引入使用,创建一个test_module.lua文件,代码如下:

-- test_module.lua 文件
-- module 模块为上文提到到 module.lua
require("module")

print(module.constant)

module.func3()
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/200708.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • linux中ssh免密登录,Linux之SSH免密登录

    Linux双向SSH免密登录原理双向,顾名思义,双方互通,此处的意思是多台linux两两免密登录.双向比单向多了些操作,单向只需把某一个linux的公钥发送给其他linux即可,而双向要实现集群中的每一台机器都保存其他所有…【Linux】ssh免密登录一.ssh免密配置ssh无密码登录要使用公钥与私钥.linux下可以用用ssh-keygen生成公钥/私钥对,下面我以Cent…

    2022年4月14日
    39
  • p6spy 非常典型 启用SQL日志「建议收藏」

    p6spy 非常典型 启用SQL日志「建议收藏」官网地址 gitHub地址 在项目的pom.xml中添加依赖 修改项目数据库连接地址ConnectionURL jdbc:mysql://host/db修改为jdbc:p6spy:mysql://host/db 修改数据库driver-class-name driver-class-name:com.mysql.cj.jdbc.Driver修改为com.p6spy.eng…

    2022年10月5日
    0
  • c++ SIMD AVX2比较 例子

    c++ SIMD AVX2比较 例子示例代码含义:记目标字符串中有多少个目标字符。linux代码(例子)如下:#include<iostream>#include<x86intrin.h>#include<fstream>#include<chrono>usingnamespacestd;structStringView{constchar*p;constsize_tlen;};StringViewFileSize(const

    2022年5月20日
    40
  • 项目总结——机房收费系统合作版「建议收藏」

    项目总结——机房收费系统合作版

    2022年2月4日
    50
  • linux ntp配置文件_linux安装ntp服务

    linux ntp配置文件_linux安装ntp服务在Linux系统中,为了避免主机时间因为在长时间运行下所导致的时间偏差,进行时间同步(synchronize)的工作是非常必要的。Linux系统下,一般使用ntp服务来同步不同机器的时间。NTP是网络时间协议(NetworkTimeProtocol)的简称,干嘛用的呢?就是通过网络协议使计算机之间的时间同步化。安装NTP包检查是否安装了ntp相关包。如果没有安装ntp相关包,使用rpm或y…

    2022年10月11日
    0
  • java实现发送手机验证码功能

    java实现发送手机验证码功能1.进入秒嘀科技(http://www.miaodiyun.com/),注册一个账号2.注册好之后,点击用户中心->账户管理,就会进入如下界面(顺便提一下,新注册的用户,平台会免费赠送你10元,足够大家学习和使用了,所以不用担心需要充钱)你需要做的就是获取你自己的ACCOUNTSID和AUTHTOKEN3.点击用户中心->认证,进行企…

    2022年7月21日
    15

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号