lua是什么?lua的基本语法知识点

news2024/11/20 20:09:42

目录

一、lua是什么?

二、lua的基本语法

1.运行lua脚本文件

2.注释

3.标示符

4.关键词

5.全局变量

三、数据类型

8个基本类型

1.nil(空)

2.boolean(布尔)

3.number(数字) 

4.string(字符串)

 5.table(表 )

6.function(函数)

7.thread(线程)

8.userdata(自定义类型)

四、变量

全局变量、局部变量与表中的域

赋值语句

五、循环与流程控制

循环

流程控制

六、函数

函数

多返回值

可变参数


本文章为笔者学习分享

学习网站:Lua 基本语法 | 菜鸟教程

一、lua是什么?

一种脚本式编程。将lus程序代码保存到一个以lua结尾的文件,并执行,该模式成为脚本式编程。

二、lua的基本语法

1.运行lua脚本文件

1.lua 脚本文件名

  • 执行hello.lua脚本文件命令为
  • lua hello.lua

2.在代码开头添加一行如下代码:

#!/usr/local/bin/lua

        该代码中,我们制定了lua的解释器/usr/local/bin diectory 加上#号标记编译器会忽略它。

然后在脚本中添加可执行权限,并执行:

./hello.lua

2.注释

单行注释

两个减号

--

多行注释

--[[
...
--]]

功能

提供交互式编程模式

lua -i
lua

3.标示符

lua标示符功能:用于定义一个变量、函数 获取其它用户定义的项

书写格式:以一个字母A到Z或a到z或下划线_卡头后加上0个或多个字母、下划线、数字(0到9)。

注意:

  • 最好不要使用下划线+大写字母的标示符,因为lua的保留字也是这样的。
  • lua不允许使用特殊字符,如@、$和%来定义标示符。
  • lua是区分大小写的编程语言

4.关键词

保留关键字不能作为常量或变量或其他用户自定义标示符:

 一般约定,以下划线开头连接一串大写字母的名字(比如 _VERSION)被保留用于 Lua 内部全局变量。

local:local关键字作为局部变量,不带local地关键字作为全局变量

        一个lua文件中如果定义了全局变量,那么在别的文件中依然可以获取到这个全局变量的值。

in:不是函数也不是变量,它是流控制语法中的一部分。

5.全局变量

访问一个没有初始化的全局变量不会出错,只是得到的结果是nil

删除一个全局变量,只需要将变量赋值为nil,这样变量就好像从来没被使用过一样。

三、数据类型

lua是动态类型语言,变量不需要类型定义,只需要为变量赋值。

8个基本类型

数据类型描述
nil表示一个无效值(条件表达式中相当于false)
boolean包含两个值:false和true
number表示双精度类型的实浮点数
string字符串由一对双引号或单引号来表示
function由C或者lua编写的函数
userdata存储在变量中的C数据结构
thread表示执行的独立路线,用于执行协同程序
tablelua中的table表其实是一个“关联数组”,数组的索引可以是数字、字符串或表类型。在lua里,table的创建是通过“构造表达式“来完成,最简单的构造表达式是{},用来创建一个空表。
print(type("Hello world"))      -- string
print(type(10.4*3))             -- number
print(type(print))              -- function
print(type(type))               -- function
print(type(true))               -- boolean
print(type(nil))                -- nil
print(type(type(X)))            -- string

1.nil(空)

含义:表示一种没有任何有效值,它只有一个值 -- nil,例如打印一个没有赋值的变量,便会输出一个 nil 值。

nil作比较时应该加上双引号”

type(x)=="nil" --返回是“nil”字符串,是一个string类型

2.boolean(布尔)

 boolean类型只有两个值:ture和false

lua把false和nil看作是false,其他都是true,数字0也是true

type(true)=boolean

type(flase)=boolean

type(nil)=nil

3.number(数字) 

lua默认只有一种number类型:double双精度类型 

4.string(字符串)

字符串由一对双引号"或单引号'来表示

可以用2个方括号"[[]]"来表示一块字符串

 在对一个数字字符串上进行算术操作时,lua会尝试将这个数字字符串转成一个数字

字符串的连接使用的是两个..

 

 使用#来计算字符串的长度,放在字符串的前面,如:

 5.table(表 )

创建格式:table的创建是通过“构造表达式”来完成,最简单的构造表达式是{},用来创建一个空表。

通过在表内添加一些数据来初始化表

table不会固定长度大小,有新数据添加时table长度会自动增长,没初始的table都是nil

local tb1={} --空表
local tbl2={"1","2","3"};--初始化创建表

使用:lua的表其实是一个"关联数组",数组的索引可以是数字或字符串

local tb1={} 
tb1["key"]="value"
key=10 --key=10
a[key]=22
a[key]=a[key]+11 --value=33

初始索引:默认从1开始,而不是0

6.function(函数)

在lua中,函数被看作是”第一类值(First-Class Value)“

函数可以存在变量里

function可以以匿名函数(anonymous function)的方式通过参数传递

function A(key,val) 
function(key,val) --匿名函数

7.thread(线程)

  lua内最主要的线程是协同程序(co-routine)。它跟线程差不多,拥有自己的独立栈、局部变量和指令指针,可以跟其他协同程序共享全局变量和塔器大部分东西。

线程与协程的区别:线程可以同时多个运行,而协程任意时刻只能运行一个,并且处于运行状态的协程只有被挂起(suspend)时才会暂停。

8.userdata(自定义类型)

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

四、变量

全局变量、局部变量与表中的域

局部变量:使用local关键字定义的变量,未使用local进行显示声明的变量是局部变量。

局部变量的作用域:从声明处开始到所在语句块结束

应该尽可能的使用局部变量,有两个好处:

  • 避免命名冲突
  • 访问局部变量的速度比全局变量更快 

赋值语句

1.可以多个赋值 

格式:变量列表和值列表的各个元素用逗号分开,赋值语句右边的值会依次赋给左边的变量

a,b=10,2*x  --a=10;n=2*x

顺序:先计算右边所有的值,然后再执行赋值操作

a=0 --a=0
b=a+1; --(1)a+1=1,(2)b=1

变量个数和值的个数不一致,lua会以变量个数为基础采取以下策略:

  • 变量个数>值个数,按变量个数补足nil
  • <,多余的值会被忽略
a,b,c=0,1  --a=0,b=1,c=nil
a,b=0,1,2  --a=0,b=1
a,b,c=0 --a=0,b=nil,c=nil 这个易错!

多值赋值经常用来交换变量,或将函数调用返回给变量,如下代码。fun()返回的值会一次赋值给变量a、b

a,b=fun()

五、循环与流程控制

循环

lua语言提供了以下几种循环处理方式:

1.while

条件为true时,程序重复执行

2.for

重复执行指定语句,重复次数可以在for语句中控制

3.repeat..until

重复执行,直到指定的条件为真时为止

4.循环嵌套

可以在循环内嵌套一个或多个循环语句

循环控制语句:

1.break

退出当前循环或语句,并开始脚本执行紧接着的语句

2.goto

将程序控制点移动到一个标签处

流程控制

1.if

2.if...else

3.if嵌套

六、函数

函数

  对语句和表达式进行抽象的主要方法。

lua函数主要有两种用途:

  • 完成指定的任务,在这种情况下函数作为调用语句使用
  • 计算并返回值,在这种情况下函数作为赋值语句的表达式使用

函数定义:

optional_function_scope function function_name( argument1, argument2, argument3..., argumentn)
    function_body
    return result_params_comma_separated
end
--[[解析:

optional_function_scope: 该参数是可选的指定函数是全局函数还是局部函数,未设置该参数默认为全局函数,如果你需要设置函数为局部函数需要使用关键字 local。

function_name: 指定函数名称。

argument1, argument2, argument3..., argumentn: 函数参数,多个参数以逗号隔开,函数也可以不带参数。

function_body: 函数体,函数中需要执行的代码语句块。

result_params_comma_separated: 函数返回值,Lua语言函数可以返回多个值,每个值以逗号隔开。--]]

多返回值

lua函数可以返回多个结果值

return 后要列出返回的值的列表 

return a,b; -- 多返回值,a,b

可变参数

Lua 函数可以接受可变数目的参数,和 C 语言类似,在函数参数列表中使用三点 ... 表示函数有可变的参数

也可以通过 select("#",...) 来获取可变参数的数量

通常在遍历变长参数的时候只需要使用 {…},然而变长参数可能会包含一些 nil,那么就可以用 select 函数来访问变长参数了:select('#', …) 或者 select(n, …)

  •  select('#', …) 返回可变参数的长度。
  • select(n, …) 用于返回从起点 n 开始到结束位置的所有参数列表。

 调用 select 时,必须传入一个固定实参 selector(选择开关) 和一系列变长参数。如果 selector 为数字 n,那么 select 返回参数列表中从索引 n 开始到结束位置的所有参数列表,否则只能为字符串 #,这样 select 返回变长参数的总数。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/502019.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一图看懂 six 模块:最常见的 POSIX 系统调用, 资料整理+笔记(大全)

本文由 大侠(AhcaoZhu)原创&#xff0c;转载请声明。 链接: https://blog.csdn.net/Ahcao2008 一图看懂 six 模块&#xff1a;最常见的 POSIX 系统调用, 资料整理笔记&#xff08;大全&#xff09; 摘要模块图类关系图模块全展开【six】统计常量intboolstrtuplelist 模块24 fun…

电脑屏幕开机后一直闪不停怎么办?电脑屏幕闪烁的解决方法

不少电脑用户经常会遇到的一种情况&#xff0c;就是开机后&#xff0c;发现电脑屏幕一直闪不停&#xff0c;十分伤眼。驱动人生就为大家带来电脑屏幕闪烁的解决方法。 首先&#xff0c;驱动人生建议可以排查一下出现电脑屏幕闪烁的原因&#xff0c;从而更加针对性的解决故障。…

SpringBoot 整合第三方技术Junit+MyBatis+Druid

测试类中加两个注解就行 SpringBootTest(classes Application.class)//添加SpringBoot 的启动类&#xff0c;万无一失 RunWith(SpringJUnit4ClassRunner.class) public class SpringBootJunitTest {Testpublic void test(){System.out.println("ddddddddddddddddddd&quo…

四象限法则定量分析法,如何客观划分需求优先级?

四象限法按照重要和紧急程度&#xff0c;划分为4个象限&#xff1a;重要且紧急、重要不紧急、不重要但紧急、不重要不紧急。那么我们如何客观地对需求进行评估&#xff0c;并将其放到对应的象限&#xff1f; 我们可以使用定量分析方法对象限进行划分和定值。在横纵坐标中&#…

php+mysql求职招聘人才网站

1&#xff0e;系统登录&#xff1a;系统登录是用户访问系统的路口&#xff0c;设计了系统登录界面&#xff0c;包括用户名、密码和验证码&#xff0c;然后对登录进来的用户判断身份信息&#xff0c;判断是管理员用户还是普通用户[10]。 2&#xff0e;系统用户管理&#xff1a;不…

温湿度换算绝对含水量

常压下 公式如下 y z * ( 8.0141786694E-09*x^5 2.3071566385E-06*x^4 1.3157923494E-04*x^3 1.1376256438E-02*x^2 3.1867343275E-01*x 4.9021104226E00 ) 式子中 z 相对湿度 单位百分比 x 摄氏度 单位度 取值范围 5-100度 y 绝对湿度 单位 克每立方…

OSPF原理—详细!!

OSPF&#xff08;open shortest path first&#xff09;&#xff1a;开放式最短路径优先 定义&#xff1a;是基于链路状态算法的路由协议 为什么要用OSPF&#xff1f; 网络发生变化&#xff0c;静态路由需要手动配置&#xff0c;太麻烦无法响应网络变化&#xff0c;需要手动更…

鸟哥的Linux私房菜——基础学习篇(第三版) (11-17章)

基础学习篇 第十一章 &#xff1a;认识和学习bash第十二章 &#xff1a;正则表达式与文件格式化处理第十三章 &#xff1a;学习shell script第十四章 &#xff1a;Linux账号管理与ACL权限设定第十五章 &#xff1a;磁盘配额(Quota)与进阶文件系统管理第十六章 &#xff1a;例行…

C++List类详解

目录 1.List介绍 2.List的常见使用 2.1 list的构造函数 2.2 list iterator的使用 2.3 list capacity 2.4 list element access 2.5 list modifiers 2.6 list的迭代器失效 3.List的模拟实现 3.1 list模拟实现&#xff08;可跳过&#xff09; 3.2 反向迭代器实现 3.2.1 list反…

100天精通Python(可视化篇)——第86天:matplotlib绘制不同种类炫酷热力图参数说明+代码实战

文章目录 专栏导读一、热力图介绍1. 介绍2. 参数说明 二、绘制热力图1. 普通热力图2. 添加坐标轴和标题3. 添加热力标尺4. 添加色块数值5. 修改热力图颜色6. 突出特殊数据 三、应用场景1. 适用场景2. 不适用场景 专栏导读 &#x1f525;&#x1f525;本文已收录于《100天精通P…

如何提高亚马逊卖家订单量?这些建议和技巧值得收藏

作为全球最大的电商平台之一&#xff0c;亚马逊拥有庞大的客户基础和丰富的销售渠道&#xff0c;这对于亚马逊卖家来说是一个非常宝贵的机会。但是&#xff0c;如何提高亚马逊卖家订单量是一个非常重要的问题。在本文中&#xff0c;我将分享一些提高亚马逊卖家订单量的建议和技…

【软考备战·希赛网每日一练】2023年5月8日

文章目录 一、今日成绩二、错题总结第一题第二题 三、知识查缺 题目及解析来源&#xff1a;2023年05月08日软件设计师每日一练 一、今日成绩 二、错题总结 第一题 解析&#xff1a; 题目中存在一个 指向链表尾元素的指针&#xff0c;所以插入操作直接通过该指针进行后续操作即…

MySQL数据库用户管理以及数据库用户授权

一、数据库用户管理 1、新建用户 CREATE USER 用户名来源地址 [IDENTIFIED BY [PASSWORD] 密码]; ---------------------------------------------------------------------------------------------------------- 用户名&#xff1a;指定将创建的用户名 来源地址&#xff1a…

Mysql数据库管理高级操作

目录 一、克隆/复制一个表1.1 方法一1.2 方法二 二、清空表&#xff0c;删除表内所有数据2.1 方法一2.2 方法二2.3 drop、truncate、delete对比①.drop table name②.truncate table table_name③.delete from table_name小结&#xff1a; 三、创建临时的表四、用户管理4.1 新建…

Java每日一练(20230508) Excel表列名称、验证回文串、路径总和II

目录 1. Excel表列名称 &#x1f31f; 2. 验证回文串 &#x1f31f; 3. 路径总和 II &#x1f31f;&#x1f31f; &#x1f31f; 每日一练刷题专栏 &#x1f31f; Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每日一练 专栏 1. Excel表列名称 给…

启动Rabbit时出现Plugin configuration unchanged无法启动问题

文章目录 问题描述问题解决新问题 问题描述 在安装好Erlang和RabbitMQ并配置好环境变量后, 运行rabbitmq-plugins enable rabbitmq_management 命令, 出现如下问题 在启动Rabbit时出现以下内容 The folwing plugins have been configured: rabbitmq_management rabbitmq_mana…

Linux中最低调、最易让人忽视的tmp目录,原来用处那么大!

在Linux操作系统中&#xff0c;tmp目录是一个临时目录&#xff0c;用于存储临时文件。这个目录通常位于根目录下&#xff0c;命名为/tmp。本文将详细介绍Linux中的tmp目录&#xff0c;包括它的作用、权限、使用方法和安全性等方面。 作用 tmp目录用于存储临时文件&#xff0c;…

为什么成本管理在项目管理中很重要

成本管理是估算、分配和控制项目成本的过程。成本管理流程允许企业预测未来的开支&#xff0c;以减少预算超支的可能性。预计成本是在项目的规划阶段计算的&#xff0c;必须在工作开始前获得批准。 在执行项目计划时&#xff0c;会记录和跟踪费用&#xff0c;因此一切都在成本管…

聊一聊智能AI的未来

AI技术的快速发展让我们走进了一个智能时代&#xff0c;各种智能产品和服务也在迅速兴起。而小凡AI作为一家国内知名的人工智能开发公司&#xff0c;旨在为用户提供高质量、高效率、低成本的人工智能解决方案。 想象一下&#xff0c;当您需要大量进行数据处理和分析时&#xf…

IT图书翻译——痛并快乐着

作者:韩磊 整理者&#xff1a;韦小琪 作者简介 韩磊是AR 技术公司亮风台的产研副总裁。在此之前&#xff0c;他曾在大学、技术媒体和财经媒体工作&#xff0c;有多年的企业经营管理、社区与媒体运营经验。他与人合著有《网络媒体教程》&#xff0c;合译有《Beginning C# Objec…