Lua脚本

1.准备

1.简介

  • 1.Lua是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放

2.目标

  • 1.其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能

3.特点

  • 1.轻量级:用标准C语言编写并以源代码形式开放,编译后仅仅一百余K,可方便嵌入别的程序里
  • 2.可扩展:Lua提供易于使用的扩展接口和机制:由宿主语言(C/C++)提供这些功能,Lua可像内置功能一样使用
  • 3.支持面向过程(procedure-oriented)编程和函数式编程(functional programming)
  • 4.自动内存管理,只提供了一种通用类型的表(table),用它可以实现数组,哈希表,集合,对象
  • 5.语言内置模式匹配;闭包(closure);函数也可以看做一个值;提供多线程(协同进程,并非操作系统所支持的线程)支持
  • 6.通过闭包和table可以很方便地支持面向对象编程所需要的一些关键机制,比如数据抽象,虚函数,继承和重载等

4.应用场景

  • 1.游戏开发
  • 2.独立应用脚本
  • 3.Web应用脚本
  • 4.扩展和数据库插件(MySQL ProxyMySQL WorkBench
  • 5.安全系统(入侵检测系统)

5.环境安装

1.Linux系统
curl -R -O http://www.lua.org/ftp/lua-5.3.0.tar.gz
tar zxf lua-5.3.0.tar.gz
cd lua-5.3.0
make linux test
make install
2.Mac系统
curl -R -O http://www.lua.org/ftp/lua-5.3.0.tar.gz
tar zxf lua-5.3.0.tar.gz
cd lua-5.3.0
make macosx test
make install
3.Window系统
  • 1.进入Lua官网:http://www.lua.org
  • 2.点击download
    在这里插入图片描述
  • 3.选择二进制文件
    在这里插入图片描述
  • 4.点击左边的Download并选择对应版本lua-5.4.2_Win64_bin.zip进行下载
    在这里插入图片描述
    在这里插入图片描述
  • 5.将对应压缩包解压到指定文件
    在这里插入图片描述
  • 6.配置环境变量
    在这里插入图片描述
  • 7.进入cmd进行测试
    在这里插入图片描述

2.基础

1.交互式编程

  • 1.默认使用交互式编程
  • 2.交互式编程可以输入程序并立即查看结果
    在这里插入图片描述

2.脚本式编程

  • 1.将Lua程序保存到一个以lua结尾的文件并执行
  • 2.如果Lua脚本文件有错误则内容都不会执行
    在这里插入图片描述
    在这里插入图片描述

3.注释

1.单行注释
--print("Hello World")
print("Hello Lua")

在这里插入图片描述
在这里插入图片描述

2.多行注释
--[[
多行注释
多行注释
--]]

在这里插入图片描述
在这里插入图片描述

4.标示符

  • 1.Lua标示符用于定义一个变量,函数获取其他用户定义的项
  • 2.标示符以一个字母 A-Za-z 或下划线 _ 开头,然后加上 0 个或多个字母,下划线,数字(0-9
  • 3.Lua不允许使用特殊字符( @$% )定义标示符
  • 4.不推荐使用下划线加大写字母的标示符,因为Lua的保留字也是这样
  • 5.一般约定以下划线开头连接一串大写字母的名字( _VERSION)被保留用于Lua内部全局变量
  • 6.Lua是一个区分大小写的编程语言,因此LuaRunoobrunoob是两个不同的标示符

5.关键字

  • 1.Lua保留关键字不能作为常量变量其他用户自定义标示符
    andbreakdoelse
    elseifendfalsefor
    functionifinlocal
    nilnotorrepeat
    returnthentrueuntil
    whilegoto

6.全局变量

  • 1.默认情况下,变量总是认为是全局的
  • 2.全局变量不需要声明,给一个变量赋值后即创建了这个全局变量
  • 3.访问一个没有初始化的全局变量不会出错,只是得到的结果是nil
  • 4.如果想删除一个全局变量,只需要将变量赋值为nil;当且仅当一个变量不等于nil时,这个变量即存在
    在这里插入图片描述

3.数据类型

  • 1.Lua是动态类型语言,变量不要类型定义,只需要为变量赋值

  • 2.值可以存储在变量中,作为参数传递或结果返回

  • 3.Lua可以使用type函数测试给定变量或者值的类型

  • 4.Lua中有8个基本类型

    数据类型描述
    nil只有值nil属于该类,表示一个无效值(在条件表达式中相当于false
    booleanfalsetrue
    number表示双精度类型的实浮点数
    string字符串由一对双引号或单引号来表示
    functionCLua编写的函数
    userdata表示任意存储在变量中的C数据结构
    thread表示执行的独立线路,用于执行协同程序
    tableLua中的表table其实是一个关联数组associative arrays;数组的索引可以是数字、字符串或表类型;Luatable 的创建是通过构造表达式来完成,最简单构造表达式是{},用来创建一个空表

    在这里插入图片描述

1.nil(空)

  • 1.nil类型表示没有任何有效值,它只有一个值nil

  • 2.打印一个没有赋值的变量,便会输出一个nil

  • 3.对于全局变量和tablenil还有一个删除作用,将全局变量或table表里的变量赋nil值等同于删除

  • 4.nil作比较时应该加上双引号(type(X)==nil 结果为 false 的原因是 type(X) 实质是返回的nil字符串是一个 string 类型)

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

2.boolean(布尔)

  • 1.boolean类型只有两个可选值:true(真) 和 false(假)
  • 2.Luafalsenil看作是false,其他的都为true,数字0也是true
    在这里插入图片描述
    在这里插入图片描述

3.number(数字)

  • 1.Lua默认只有一种number类型 -> double(双精度)类型(默认类型可以修改luaconf.h里的定义)
    在这里插入图片描述
    在这里插入图片描述

4.string(字符串)

  • 1.字符串由一对双引号或单引号来表示
  • 2.或者使用2个方括号[[]]来表示一块字符串
  • 3.对一个数字字符串进行算术操作时,Lua会尝试将该数字字符串转换成一个数字
  • 4.字符串连接使用的是 ..
  • 5.使用#计算字符串的长度并且放在字符串前面
    在这里插入图片描述
    在这里插入图片描述

5.table(表)

  • 1.Luatable的创建是通过构造表达式来完成,最简单构造表达式是{},用来创建一个空表
  • 2.table也可以创建时在表里添加数据直接初始化表
  • 3.Lua中的表table其实是一个关联数组associative arrays,数组的索引可以是数字字符串(表类似集合)
  • 4.如果遍历则第一个参数默认为索引,第二个参数为value
  • 5.不同于其他语言的数组把0作为数组的初始索引,Lua 中表的默认初始索引以1开始
  • 6.table不会固定长度大小,有新数据添加时table长度会自动增长(注意:#只能统计索引为数字的长度),没初始的table都是nil
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

6.function(函数)

  • 1.Lua中函数被看作是第一类值First-Class Value,函数可以存在变量中
  • 2.function可以以匿名函数anonymous function的方式通过参数传递
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

7.thread(线程)

  • 1.Lua中最主要的线程是协同程序coroutine
  • 2.类似线程thread,拥有自己独立的栈、局部变量和指令指针
  • 3.可以跟其他协同程序共享全局变量和其他大部分东西
  • 4.线程跟协程的区别:线程可以同时多个运行,而协程任意时刻只能运行一个,并且处于运行状态的协程只有被挂起suspend时才会暂停

8.userdata(自定义类型)

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

4.变量

  • 1.变量在使用前需要在代码中进行声明,即创建该变量
  • 2.编译程序执行代码之前编译器需要知道如何给语句变量开辟存储区,其用于存储变量的值
  • 3.Lua变量有三种类型
    • 1.全局变量
    • 2.局部变量
    • 3.表中的域
  • 4.变量的默认值均为nil
    在这里插入图片描述
    在这里插入图片描述

1.全局变量

  • 1.Lua中的变量全是全局变量,哪怕是语句块或是函数里,除非用local显式声明为局部变量
  • 2.Lua语言中,全局变量无须声明即可使用,使用未经初始化的全局变量不会导致错误
  • 3.当使用未经初始化的全局变量时,得到的结果为nil

2.局部变量

  • 1.只有使用local显式声明的才是局部变量
  • 2.局部变量的作用域为从声明位置开始到所在语句块结束
  • 3.尽可能的使用局部变量,有两个好处
    • 1.避免命名冲突
    • 2.访问局部变量的速度比全局变量更快

3.变量赋值

  • 1.Lua可对多个变量同时赋值,变量列表和值列表的各个元素用逗号分开,赋值语句右边的值会依次赋给左边的变量
  • 2.遇到赋值语句Lua会先计算右边所有的值然后再执行赋值操作,所以可以快捷交换变量的值
  • 3.当变量个数和值的个数不一致时,Lua会一直以变量个数为基础采取以下策略
    • 1.变量个数 > 值的个数 -> 按变量个数补足nil
    • 2.变量个数 < 值的个数 -> 多余的值会被忽略
  • 4.如果要对多个变量赋值必须依次对每个变量赋值
  • 5.多值赋值经常用来交换变量,或将函数调用返回给变量
  • 6.Lua对多个变量同时赋值,不会进行变量传递,仅做值传递
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

5.循环

  • 1.循环结构是在一定条件下反复执行某段程序的流程结构,被反复执行的程序被称为循环体
  • 2.循环语句是由循环体及循环的终止条件两部分组成的
    在这里插入图片描述

1.while循环

2.for循环

3.repeat…until循环

4.嵌套循环

5.break语句

6.goto语句

6.流程控制

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

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

相关文章

【Qt】—— Qt Creator界⾯认识

目录 &#xff08;一&#xff09;左边栏 &#xff08;二&#xff09;代码编辑区 &#xff08;三&#xff09;UI设计界⾯ &#xff08;四&#xff09;构建区 &#xff08;一&#xff09;左边栏 在编辑模式下&#xff0c;左边竖排的两个窗⼝叫做"边栏"。 ①是项⽬…

动手实践WebVR 全景

前言 近年来VR概念越来越火&#xff0c;相信大家在网上都有过VR的浏览体验&#xff0c;比如VR全景看房[1]、VR全景看车[2]、VR全景旅游[3]等等&#xff0c;VR全景给了我们视觉上的沉浸式体验。本文将会简单探究Web VR全景的实现原理&#xff0c;同时也会用threejs实现两个小的…

Linux文本三剑客-sed

一、sed介绍&#xff1a; sed&#xff08;Stream Editor&#xff09;是一种流编辑器&#xff0c;用于对文本进行处理和转换。它可以从输入流中读取文本&#xff0c;并根据指定的规则进行编辑和替换。sed通常用于在命令行中进行文本处理&#xff0c;可以实现搜索、替换、删除、…

Vmware 无法开启虚拟化解决方法

最近遇到了Vmware无法开启虚拟化的问题,已经解决,记录一下解决经过。 我遇到的情况是BIOS已经开启虚拟化,HV服务也停用了,但是Vmware仍然提示模块“VPMC”启动失败。网上的解决方案千篇一律,基本都是排查BIOS、停用Windows的虚拟化功能、停用HV主机服务、Vmware配置中关闭…

【开源】SpringBoot框架开发天然气工程运维系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 系统角色分类2.2 核心功能2.2.1 流程 12.2.2 流程 22.3 各角色功能2.3.1 系统管理员功能2.3.2 用户服务部功能2.3.3 分公司&#xff08;施工单位&#xff09;功能2.3.3.1 技术员角色功能2.3.3.2 材料员角色功能 2.3.4 安…

如何快速将 HTML 文件转换为 PDF

HTML表格是一种在网页上显示数据的通用且强大的方式。它们可用于创建简单的表&#xff08;例如日历&#xff09;或更复杂的表&#xff08;例如数据网格&#xff09;。在这篇博文中&#xff0c;我们将逐步学习如何在 C# 中创建 HTML 表格。本指南将为您提供在 C# 中有效创建 HTM…

阿里云服务器一键部署幻兽帕鲁专属服务器,图形化可视化修改游戏参数是如此简单!

幻兽帕鲁这款游戏最近很火&#xff0c;在线玩家太多了&#xff0c;官方服务器也是承压巨大&#xff0c;很多玩家现在都是搭建自己的专属幻兽帕鲁服务器来玩。搭建教程现在也是越来越简单了&#xff0c;可以说是真正的零基础&#xff0c;一看就会&#xff0c;并且开箱即玩&#…

【python】在python中使用单元测试unittest

在python中使用单元测试unittest 大家好&#xff0c;欢迎来到我的技术乐园&#xff01;今天&#xff0c;我们将一起踏入Python单元测试的奇妙旅程&#xff0c;探索这个让我们的代码更可靠、更强壮的令人愉快的世界。 前言&#xff1a;为什么单元测试如此重要&#xff1f; 在我…

鱼和熊掌如何兼得?一文解析RDS数据库存储架构升级

在2023年云栖大会上&#xff0c;阿里云数据库产品事业部负责人李飞飞在主题演讲中提到&#xff0c;瑶池数据库推出“DB存储”一体化能力&#xff0c;结合人工智能、机器学习、存储等方法和创新能力&#xff0c;实现Buffer Pool Extension能力和智能冷温热数据分层能力。在大会的…

01神经网络的理论及实现

感知机的缺点就是需要设置合适的权重&#xff0c;而权重的设置都是人工操作的。 1、从感知机到神经网络 重新画出感知机的模型&#xff0c;在图上加上偏置&#xff0c;由于偏置始终为1&#xff0c;所以颜色加深。 图1-1 感知机模型 引入新函数(激活函数&#xff09;&#xff…

2024前端面试题汇总

2024前端面试题汇总 1、全局变量与局部变量2、Vue3 区分ref 与 reactive 的原因3、关于服务端渲染&#xff08;SSR&#xff09;与客户端渲染&#xff08;CSR&#xff09;的理解4、单页面应用&#xff08;SPA&#xff09;与多页面应用&#xff08;MPA&#xff09;的优劣5、Vue2 …

计算机二级Python选择题考点——Python语言程序设计Ⅱ

代码1&#xff1a; def fibRate(n):if n < 0:return -1elif n 1:return -1elif n 2:return 1else:L [1,5]for i in range(2,n):L.append(L[-1] L[-2])return L[-2] % L[-1] print(fibRate(7))n 7 L [1,5] i 2 , 3 , 4 , 5 , 6 i 2 -> L[-1] L[-2] 5 1 6 -&g…

Linux逻辑卷(LV)扩容

Linux逻辑卷&#xff08;LV&#xff09;扩容 1、准备物理磁盘&#xff08;分区和不分区都行&#xff09;&#xff0c;可以使用lsblk命令查看新增的磁盘&#xff0c;如下图sde就是我们新增磁盘&#xff0c;容量为600G。 2、将新磁盘变成物理卷&#xff08;PV&#xff09; pvcr…

缓存的概念

文章目录 一、系统缓存buffer与cachecache 的保存位置cache 的特性 二、用户层缓存DNS缓存 三、浏览器缓存过期机制最后修改时间Etag标记过期时间 expires混合使用和缓存刷新缓存刷新 cookie和session 四、CDN缓存什么是CDN用户请求CDN流程利用 302 实现转发请求重定向至最优服…

RabbitMQ 死信队列应用

1. 概念 死信队列&#xff08;Dead Letter Queue&#xff09;是在消息队列系统中的一种特殊队列&#xff0c;用于存储无法被消费的消息。消息可能会因为多种原因变成“死信”&#xff0c;例如消息过期、消息被拒绝、消息队列长度超过限制等。当消息变成“死信”时&#xff0c;…

【数据分享】1929-2023年全球站点的逐月最高气温数据(Shp\Excel\无需转发)

气象数据是在各项研究中都经常使用的数据&#xff0c;气象指标包括气温、风速、降水、湿度等指标&#xff0c;其中又以气温指标最为常用&#xff01;说到气温数据&#xff0c;最详细的气温数据是具体到气象监测站点的气温数据&#xff01; 之前我们分享过1929-2023年全球气象站…

Leetcode1109. 航班预订统计

Every day a Leetcode 题目来源&#xff1a;1109. 航班预订统计 解法1&#xff1a;差分数组 注意到一个预订记录实际上代表了一个区间的增量。我们的任务是将这些增量叠加得到答案。因此&#xff0c;我们可以使用差分解决本题。 代码&#xff1a; /** lc appleetcode.cn i…

asp.net core监听本地ip地址

开发asp.net core的时候遇到一个问题我想提供访问供其他同事测试&#xff0c;但是默认都是localhost或者127.0.0.1。我想换成我的Ip地址访问但是不行&#xff0c;百度搜索需要更换监听的地址即修改launchSettings.json&#xff0c;修改为0.0.0.0:5248&#xff0c;这样不管local…

力扣hot100 跳跃游戏 II 贪心 思维

Problem: 45. 跳跃游戏 II 思路 &#x1f468;‍&#x1f3eb; 参考 每次在上次能跳到的范围&#xff08;end&#xff09;内选择一个能跳的最远的位置&#xff08;也就是能跳到max_far位置的点&#xff09;作为下次的起跳点 &#xff01; Code ⏰ 时间复杂度: O ( n ) O(n…

DVI接口主机连接VGA显示器解决方案:DVI转VGA转换器DV

DVI转VGA转换器概述 DVI转VGA转换器能够将DVI数字信号转换成VGA模拟信号&#xff0c;通过VGA线缆传输给VGA显示设备使用&#xff0c;这样就能实现DVI接口主机连接VGA接口的显示器。 DVI转VGA转换器DV DVI转VGA转换器DV接口说明 DVI转VGA转换器DV接口介绍 DVI转VGA转换器连接示…