当前位置: 首页 > news >正文

Lua 语法学习笔记

Lua 语法学习笔记

安装(windows)

官网:https://www.lua.org/

下载SDK

image-20240721123802978

image-20240721123836142

image-20240721123906339

image-20240721123959065

解压&修改名称(去除版本号)

将lua后面的版本号去掉,如lua54.exe->lua.ext

image-20240721124100681

配置环境变量

image-20240721124218028

数据类型

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

string

字符串类型,比较特别的是,字符串的连接不是使用+号,而是使用"…",使用+,字符串会被隐式的转化为数字(如果字符串不是数字将会报错)

str = 'hua'..'kai'
--输出"huakai"
print(str) --输出3,字符串会被隐式的转化为数字
print("1"+2)

table

一个比较强大的数据结构,类似一个数据,但它的索引值,不仅仅是数字(索引值从1开启),也可以是一个字符串,这使得它像一个map

-- 作为map使用
local table1 = {key1="value1",key2="value2"}
for key,value in pairs(table1) doprint(key,value)
end
-- 输出
--key1	value1
--key2	value2-- 作为数组使用
local table2 = {1,2,3}
for index,value in ipairs(table2) doprint(index,value)
end
索引访问

当table索引值为字符串时,支持类型属性的访问使用"."

local table1 = {key1="value1",key2="value2"}
print(table1["key1"]) -- value1
print(table1.key1) --value1
table库函数
  1. table.insert:插入元素。

    local t = {1, 2, 3}
    table.insert(t, 4)
    print(t[4])  -- 输出: 4
    
  2. table.remove:移除元素。

    table.remove(t, 2)
    print(t[2])  -- 输出: 3
    
  3. table.sort:排序。

    local t = {5, 3, 2, 4, 1}
    table.sort(t)
    for i, v in ipairs(t) doprint(v)  -- 输出: 1 2 3 4 5
    end
    

function

函数,类似js,可以作为一个变量

变量

分为全局变量和局部变量,如果不使用local声明,默认都是全局变量哪怕它在局部代码块中

赋值

支持多个变量同时赋值

local a,b = 1,2
a,b = b,a
print(a,b)   --2    a,b 变量交换

循环

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

循环类型描述
while 循环在条件为 true 时,让程序重复地执行某些语句。执行语句前会先检查条件是否为 true。
for 循环重复执行指定语句,重复次数可在 for 语句中控制。
repeat…until重复执行循环,直到 指定的条件为真时为止
循环嵌套可以在循环内嵌套一个或多个循环语句(while do … end;for … do … end;repeat … until;)
--- while
local a = 3
while (a > 0) doprint(a)a = a - 1
endlocal b = 3--- repeat 循环
repeatprint(b)b = b - 1
until b <= 0--- for 循环
for i = 1, 3 doprint(i)
end--- for 循环,补仓为2
for i = 1, 3, 2 doprint(i)
end

函数

多返回值

支持返回多个值,可以使用多个变量接收,也可以使用一个table接受

local coordinates = {getCoordinates()}
print(coordinates[1], coordinates[2])  -- 输出: 10  20
local x,y = getCoordinates()
print(x,y)  -- 输出: 10  20

字符串

除了可以使用单引号、双引号表达字符串意外,还可以使用[[]]

local str = [[
孤独的人和欢乐的人zuo一块
孤独的人只会觉得更孤独
]]print(str)

计算长度

在 Lua 中,要计算字符串的长度(即字符串中字符的个数),你可以使用 string.len函数或 utf8.len 函数,包含中文的一般用 utf8.lenstring.len 函数用于计算只包含 ASCII 字符串的长度。

注意,uf8在5.3版本后才内置

local str1 = 'huakai'
local str2 = 'huakai不识'print(string.len(str1)) --- 6
print(string.len(str2)) --12 一个中文字符的使用三个字节相当于3倍的ASCII长度
print(utf8.len(str2)) ---8

迭代器

ipairs和pairs比较

  • ipairs 函数用于迭代一个table的数组部分(即索引为连续整数的部分)。迭代从索引1开始,直到遇到第一个 nil 值为止。
  • pairs 函数用于迭代一个table的所有键值对,无论这些键是整数还是其他类型(如字符串)。pairs 不保证迭代顺序,迭代顺序是非确定性的。

模块

定义模块
module = {}module.var1 = 'huakai'--- 这个方法无法被外部访问
local function private_function()print('I‘m private function')
endfunction module.public_function()print('I’m public function')
endreturn module

其中的return可以省略,但是为了体现该文件的是为了作为一个可能被外部引用的模块可以保留

引入模块
-- 存在于自定义的路径
require("hello")require("test2.common")
-- 引入后赋值给一个变量,可以更清晰的定义引用的模块
local common = require("test2.common")print(module.var1)
print(module.public_function())--print(common.public_function())--print(package.path)
  1. 使用**require(“包含路径的文件名”)**可以引用定义好的模块
  2. 在环境变量LUA_PATH,中可以定义自定义的加载路径(多个使用;分割)
    1. C:\Users\huakai\Desktop?.lua;;,前面的就是自定义的加载路径,;;表示新加的路径后面加上原来的默认路径
  3. 使用package.path可以输出当前加载的所有路径

面向对象

元表&__index
  1. 元表(metatable): 元表是一个普通的 Lua 表,可以附加到另一个表上。通过设置元表,可以改变该表的一些默认行为。
  2. __index 字段__index 是元表中的一个字段,用于定义当在表中访问不存在的键时该如何处理。__index 可以是一个表或一个函数。
    • 如果 __index 是一个表,那么 Lua 会在这个表中查找键。
    • 如果 __index 是一个函数,那么 Lua 会调用这个函数,将原表和键作为参数传递给它。
面向对象示例
Dog = {name = '',age = 0,
}
function Dog:new(name, age)local dog = {}setmetatable(dog, self) -- 将Dog设置为dog的元表self.__index = self  -- 将__index字段设置为self,使得dog可以访问Dog的字段和方法dog.name = namedog.age = agereturn dog
endfunction Dog:say()print(self.name .. ' is wang wang')
endfunction Dog:getAge()return self.age
enddog = Dog:new('huahua', 3)dog:say() -- huahua is wang wang
print(dog:getAge()) -- 3

相关文章:

Lua 语法学习笔记

Lua 语法学习笔记 安装(windows) 官网&#xff1a;https://www.lua.org/ 下载SDK 解压&修改名称&#xff08;去除版本号&#xff09; 将lua后面的版本号去掉&#xff0c;如lua54.exe->lua.ext 配置环境变量 数据类型 数据类型描述nil这个最简单&#xff0c;只有值n…...

Prometheus配置alertmanager告警

1、拉取镜像并运行 1、配置docker镜像源 [rootlocalhost ~]# vim /etc/docker/daemon.json {"registry-mirrors": ["https://dfaad.mirror.aliyuncs.com"] } [rootlocalhost ~]# systemctl daemon-reload [rootlocalhost ~]# systemctl restart docker2、…...

.net core 外观者设计模式 实现,多种支付选择

1&#xff0c;接口 /// <summary>/// Web页面支付/// </summary>public interface IWebPagePay{public WebPagePayResult CreatePay(string productName, string orderSn, string totalPrice);}2&#xff0c;实现接口 实现阿里支付 public class AliPagePay : IWe…...

Matlab 命令行窗口默认输出(异常)

目录 前言Matlab 先验知识1 异常输出的代码2 正常输出的代码 前言 在单独调试 Matlab 写的函数时出现不想出现的异常打印值&#xff0c;逐个注释排查才找到是 if elseif else 代码块的问题&#xff0c;会默认打印输出 else 部分第一个返回值的值&#xff08;下方代码中的 P值&…...

LeetCode/NowCoder-二叉树OJ练习

励志冰檗&#xff1a;形容在清苦的生活环境中激励自己的意志。&#x1f493;&#x1f493;&#x1f493; 目录 说在前面 题目一&#xff1a;单值二叉树 题目二&#xff1a;相同的树 题目三&#xff1a;对称二叉树 题目四&#xff1a;二叉树的前序遍历 题目五&#xff1a;另…...

PSINS工具箱函数介绍——insplot

insplot是一个绘图命令,用于将avp数据绘制出来 本文所述的代码需要基于PSINS工具箱,工具箱的讲解: PSINS初学指导基于PSINS的相关程序设计(付费专题)使用方法 此函数使用起来也很简单,直接后面加avp即可,如: insplot(avp);其中,avp为: 每行表示一个时间1~3列为姿态…...

Docker简单快速入门

1. 安装Docker 基于 Ubuntu 24.04 LTS 安装Docker 。 # 更新包索引并安装依赖包 sudo apt-get update sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common# 添加Docker的官方GPG密钥并存储在正确的位置 curl -fsSL https://mirror…...

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 图像物体的边界(200分) - 三语言AC题解(Python/Java/Cpp)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 🍿 最新华为OD机试D卷目录,全、新、准,题目覆盖率达 95% 以上,支持题目在线…...

【无人机】低空经济中5G RedCap芯片的技术分析报告

1. 引言 图一. 新基建&#xff1a;低空经济 低空经济作为一种新兴的经济形态&#xff0c;涵盖了无人机、电动垂直起降飞行器&#xff08;eVTOL&#xff09;、低空物流、空中交通管理等多个领域。随着5G网络的普及和演进&#xff0c;5G RedCap&#xff08;Reduced Capability&a…...

MongoDB教程(二十一):MongoDB大文件存储GridFS

&#x1f49d;&#x1f49d;&#x1f49d;首先&#xff0c;欢迎各位来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里不仅可以有所收获&#xff0c;同时也能感受到一份轻松欢乐的氛围&#xff0c;祝你生活愉快&#xff01; 文章目录 引言一、GridFS…...

vue 搜索框

效果 创建搜索组件&#xff1a; 在Vue项目中&#xff0c;首先需要创建一个搜索组件。这个组件通常包含一个输入框和一个搜索按钮。使用v-model指令将输入框与组件的数据属性&#xff08;如searchKeyword&#xff09;进行双向绑定&#xff0c;以便获取用户输入的关键词。处理搜索…...

国科大作业考试资料-人工智能原理与算法-2024新编-第五次作业整理

1、本题以井字棋(圈与十字游戏)为例练习博弈中的基本概念。定义X_n为恰好有n个X而没有O 的行、列或者对角线的数目。同样O_n为正好有n 个O的行、列或者对角线的数目。效用函数给 X_3=1的棋局+1, 给O_3=1的棋局-1。所有其他终止状态效用值为0。对于非终止状态,使用线性的 …...

C++五子棋(未做完,但能玩,而且还不错)

代码放下面了&#xff0c;关于步骤介绍的我以后再完善一下。 #include<bits/stdc.h> #include<cstdio> #include<cstdlib> #include<ctime> #include<windows.h> #include<stdlib.h> #include<time.h> #define random(x) (rand()%x…...

二分查找代码详解

二分查找代码实现 以下是完整的代码和解释&#xff1a; #include <stdio.h>int binarySearch(int arr[], int length, int target) {int left 0;int right length - 1;while (left < right) {int mid left (right - left) / 2; // 防止溢出if (arr[mid] target…...

uniapp的h5,读取本地txt带标签的文件

效果图 使用的回显的标签是u-parse&#xff0c;下面的网址讲了这个标签的相关 https://www.cnblogs.com/huihuihero/p/12978903.html 导入此插件 https://ext.dcloud.net.cn/plugin?id364 使用 uni.request({// 本地文件url: "/static/互联网医院医师端用户协议.txt…...

韦东山嵌入式linux系列-具体单板的按键驱动程序(查询方式)

1 GPIO 操作回顾 &#xff08;1&#xff09;使能模块&#xff1b; &#xff08;2&#xff09;设置引脚的模式&#xff08;工作于GPIO模式&#xff09;&#xff1b; &#xff08;3&#xff09;设置GPIO本身&#xff08;输入/输出&#xff09;&#xff1b; &#xff08;4&…...

如何使用 API list 极狐GitLab 群组中的镜像仓库?

GitLab 是一个全球知名的一体化 DevOps 平台&#xff0c;很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab &#xff1a;https://gitlab.cn/install?channelcontent&utm_sourcecsdn 是 GitLab 在中国的发行版&#xff0c;专门为中国程序员服务。可以一键式部署…...

PHP设计模式-简单工厂模式

核心&#xff1a; 一、定义一个接口类里面写规定好的方法。 interface Message{public function send(array $params);public function getMessage(array $params);public function getCode(array $params);} 二、定义产品类 、产品类继承接口类 class AlliYunSms implements …...

C语言航空售票系统

以下是系统部分页面 以下是部分源码&#xff0c;需要源码的私信 #include<stdio.h> #include<stdlib.h> #include<string.h> #define max_user 100 typedef struct ft {char name[50];//名字char start_place[50];//出发地char end_place[50];//目的地char …...

Oracle 19c打Datapatch数据补丁报错处理

Oracle 19c打Datapatch数据补丁报错处理 错误分析重新编译补丁验证安装完数据库补丁后,在数据补丁的步骤收到以下报错: Connecting to database...OK Gathering database info...done Bootstrapping registry and package to current versions...done Determining current s…...

Linux shell编程学习笔记66:ping命令 超详细的选项说明

0 前言 网络信息是电脑网络信息安全检查中的一块重要内容&#xff0c;Linux和基于Linux的操作系统&#xff0c;提供了很多的网络命令&#xff0c;今天我们研究最常用的ping命令。 1 ping命令 的功能、格式和选项说明 1.1 ping命令 的功能 简单来说&#xff0c; ping 命令 会…...

SSL/TLS和SSL VPN

1、SSL/TLS SSL安全套接字层&#xff1a;是一种加密协议&#xff0c;用于在网络通信中建立安全连接。它在应用层和传输层&#xff08;TCP/IP&#xff09;之间提供数据加密、服务器身份验证以及信息完整性验证 SSL只保护TCP流量&#xff0c;不保护UDP协议 TLS&#xff1a;传输层…...

浅谈WebSerice

一. 什么是WebService Web Service也称为web服务&#xff0c;它是一种跨编程语言和操作系统平台的远程调用技术。Web Service采用标准的SOAP协议传输&#xff08;SOAP&#xff1a;Simple Object Access Protocol简单对象访问协议&#xff0c;soap属于w3c标准。并且soap协议是基…...

linux快速入门-学习笔记

linux快速入门-学习笔记 第一章&#xff1a;Linux系统概念及命令学习Linux系统基本概念命令终端介绍命令格式介绍Linux系统辨别目录与文件的方法通过文件详细属性辨别ls 查看目录/文件命令Linux 系统下的归属关系命令行编辑技巧Linux 基本权限的类别课后练习 第二章&#xff1a…...

科普文:5种Linux下软件部署方式说明

在Linux世界里&#xff0c;高效、灵活地安装和管理软件是每个系统管理员和开发者的基本功。从传统的RPM包管理&#xff0c;到便捷的YUM软件仓库&#xff0c;再到颠覆性的Docker容器技术&#xff0c;Snap&#xff0c;源码安装&#xff0c;每一种方法都有其独到之处&#xff0c;适…...

Redisson中的RBlockingQueue的使用场景及例子

Redisson 的 RBlockingQueue 是一个实现了 Java BlockingQueue 接口的分布式队列&#xff0c;它可以用于在分布式系统中实现生产者-消费者模式。RBlockingQueue 提供了线程安全的阻塞队列操作&#xff0c;允许生产者在队列满时阻塞&#xff0c;消费者在队列空时阻塞&#xff0c…...

【办公软件】Office 2019以上版本PPT 做平滑切换

Office2019以上版本可以在切页面时做平滑切换&#xff0c;做到一些简单的动画效果。如下在快捷菜单栏中的切换里选择平滑。 比如&#xff0c;在两页PPT中&#xff0c;使用同一个形状对象&#xff0c;修改了大小和颜色。 选择切换为平滑后&#xff0c;可以完成如下的动画显示。 …...

connect-multiparty中间件用法以及实例--文件上传中间件(保姆级别教学)

connect-multiparty中间件的用法包括安装和引入、基本设置、路由应用、文件处理以及安全和优化等步骤。 connect-multiparty是一个专为Connect和Express框架设计的文件上传中间件&#xff0c;它基于multiparty库&#xff0c;用于处理多部分表单数据&#xff0c;尤其针对文件上传…...

0503触发器的电路结构和工作原理

触发器的电路结构和工作原理 如何区分锁存器还是触发器&#xff0c; 看有没有这个三角符号&#xff0c;告诉是上升沿触发还是下降沿触发&#xff0c;没有三角符号就是电平触发。低电平触发就画个小圈。高电平触发就不画小圈。有小圈的三角就是下降沿触发 setup建立时间 hold 保…...

LeetCode:二叉树的中序遍历(C语言)

1、前序遍历&#xff1a;根左右 2、中序遍历&#xff1a;左根右 3、后序遍历&#xff1a;左右根 1、问题概述&#xff1a;二叉树中序遍历 2、示例 示例 1&#xff1a; 输入&#xff1a;root [1,null,2,3] 输出&#xff1a;[1,3,2] 示例 2&#xff1a; 输入&#xff1a;root […...