Lua语法(二)——闭包/日期和时间

参考链接:
系列链接: Lua语法(一)
系列链接: Lua语法(二)——闭包/日期和时间
系列链接: Lua语法(三)——元表与元方法
系列链接: Lua语法(四)——协程
系列链接: Lua语法(五)——垃圾回收
系列链接: Lua语法(六)——面相对象编程

Lua语法 目录二

    • 概述
      • 闭包
      • 模块和包
        • 模块和包相关函数
          • dofile、loadfile和require 的区别
          • require
          • dofile
          • loadfile
      • 模式匹配
        • 模式串含义
        • string.find
        • string.gsub
        • string.match
        • string.gmatch
      • 日期和时间
        • os.time
        • os.date
        • os.difftime
      • 位运算
      • 编译、执行和错误处理
        • 1.预编译
        • 2.错误处理

概述

关于闭包,模块和包的概念。
Lua中的闭包、模块和包都是用来组织和封装代码的机制。

闭包

闭包是指一个函数和其相关的环境变量的组合。当一个函数在其外部定义的环境中使用某些变量时,这些变量将会保存在闭包中,使得函数可以在其定义之外的地方继续使用这些变量。使用闭包可以实现很多高级的编程技巧,例如函数工厂、延迟计算等。

--闭包案例:url解码
str = "word=%22%E4%BD%A0%E5%A5%BD%22;name=%22%E5%BC%A0%E4%BC%9F%22"
function urldecode(s)s = string.gsub(s,"+"," ")s = string.gsub(s,"%%(%x%x)",function (h)return string.char(tonumber(h,16))end)return s
endprint(urldecode(str))
--输出	word="你好";name="张伟"

模块和包

Lua5.1以后,引入了模块和包

可以将其他lua文件作为模块,让当前lua文件调用

模块和包相关函数
dofile、loadfile和require 的区别

在Lua语言中,dofile、loadfile和require都是用于加载和执行Lua代码的函数,但它们之间有一些区别。

dofile函数是最简单的加载和执行Lua代码的方式。它接受一个文件路径作为参数,并返回执行结果。dofile函数会直接加载并执行指定路径的Lua脚本文件,返回脚本的执行结果。每次调用dofile函数都会重新加载和执行脚本文件。

loadfile函数用于加载Lua代码块并返回一个函数。它接受一个文件路径作为参数,并返回一个函数对象,该函数可以用于多次执行该代码块。loadfile函数只加载并编译脚本文件,不会立即执行代码。调用返回的函数对象可以多次执行代码块,每次执行返回执行结果。

require函数是用于加载和执行Lua模块的函数。它接受一个模块名作为参数,并返回模块的返回值。require函数先检查指定的模块是否已经加载,如果已经加载则直接返回模块的返回值。如果模块尚未加载,则会搜索Lua模块路径来查找并加载对应的Lua文件。require函数只会加载和执行模块一次,后续调用require函数会直接返回缓存的模块返回值。

需要注意的是,dofile和loadfile可以加载任意的Lua代码文件,而require函数则只能加载具有特定规范的Lua模块文件。

案例:

如果模块名和文件名不一致,那么需要将模块所在的文件放到Lua根目录下的lua文件夹里面

如果模块名和文件名一致,则可以将模块所在的文件和当前文件放在同一个文件夹下,所以,建议让模块名和文件名保持一致

例如模块名 叫 model ,那么文件名叫 model.lua为一致

否则模块会require调用失败

require
--model.lua
local model = {}model.wwww = function ()print("test")
endreturn model		--这里不要忘记return--test.lua
local mod =require("model")	--可以自定义一个本地的名字mod.wwww()
--输出	test
dofile

读取文件并直接运行

--block.lua
print("here is block")local function block()print("bolck fun is doi

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

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

相关文章

基于SSM的旅游管理系统论文

摘 要 互联网发展至今,无论是其理论还是技术都已经成熟,而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播,搭配信息管理工具可以很好地为人们提供服务。针对旅游信息管理混乱,出错率高,信息安全性差&am…

Go语言中忘记字符串格式化可能产生的副作用

格式化字符串是开发人员经常要进行操作,无论是返回错误还是记录消息。但在处理并发应用程序时,开发人员很容易忘记字符串格式化带来的潜在副作用。下面将看到两个具体示例:一个是读取etcd存储导致数据竞争,另一个是导致死锁的情况。 1. etcd数据竞争 etcd是一个用Go实现的…

解决cmd输入py文件路径不能执行,使用anaconda prompt 能执行

究其原因,是因为没有配置环境!!!!!!! 第一步:配置环境变量 操作步骤如下: 1、右击此电脑 ---->属性 2、高级系统设置 3、点击环境变量 4、选择 …

代码随想录--数组--长度最小的子数组

题目 给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的 连续 子数组,并返回其长度。如果不存在符合条件的子数组,返回 0。 示例: 输入:s 7, nums [2,3,1,2,4,3] 输出&#…

Java学习笔记03:核心类

4.1 基本类型的封装类 // 字符串转int Integer obj new Intreger("10"); int n new Integer("10"); int num Integer.parseInt("10"); // 字符串转float float fl loat.parseFloat("10.0"); float f2 new Float("10.0"…

【论文笔记】ResRep: Lossless CNN Pruning via Decoupling Remembering and Forgetting

Abstract 提出了ResRep,一种无损通道修剪的新方法,它通过减少卷积层的宽度(输出通道数)来缩小CNN的尺寸。 建议将CNN重新参数化为记忆部分和遗忘部分,前者学习保持性能,后者学习修剪。通过对前者使用常规 …

[BT]BUUCTF刷题第16天(4.12)

第16天 Web [MRCTF2020]Ezpop 打开网站就是一段泄露的源代码&#xff1a; <?php //flag is in flag.php //WTF IS THIS? //Learn From https://ctf.ieki.xyz/library/php.html#%E5%8F%8D%E5%BA%8F%E5%88%97%E5%8C%96%E9%AD%94%E6%9C%AF%E6%96%B9%E6%B3%95 //And Crack…

「49」一拆为九,探索直播内容的商业价值

「49」拆分变现:一拆为九探索直播内容的商业价值 直播已经成为现代社交互动的热门方式,然而,直播内容一经结束,是否可以为我们带来更多的价值? 这篇文章将探究如何发挥创意,将直播内容变现为多种形式,例如电子书、实体书、课程和短视频、文章、音频等,让我们一起来一…

数字化转型(二)-华为发布的数字化转型:从战略到执行

个人认为这是一篇很好&#xff0c;值得看的文章&#xff0c;但是没啥大用&#xff0c;可供参考。 数字化转型是一个复杂而全面的过程&#xff0c;它涉及到从战略规划到具体执行的多个层面。根据提供的信息&#xff0c;我们可以从以下几个方面来理解和探讨数字化转型的从战略到执…

文件名乱码危机:数据恢复全攻略

在数字化时代的浪潮中&#xff0c;电脑文件成为我们日常生活和工作中不可或缺的一部分。然而&#xff0c;有时我们会突然遭遇一个令人头疼的问题&#xff1a;原本清晰易读的文件名突然变成了乱码。这些乱码文件名不仅让我们无法准确识别文件内容&#xff0c;更可能意味着数据丢…

时间序列分析 # 平稳性检验和ARMA模型的识别与定阶 #R语言

掌握单位根检验的原理并能解读结果&#xff1b;掌握利用序列的自相关图和偏自相关图识别模型并进行初步定阶。 原始数据在文末&#xff01;&#xff01;&#xff01; 练习1、根据某1971年9月-1993年6月澳大利亚季度常住人口变动&#xff08;单位&#xff1a;千人&#xff09;的…

一个开源跨平台嵌入式USB设备协议:TinyUSB

概述 TinyUSB 是一个用于嵌入式系统的开源跨平台 USB 主机/设备堆栈&#xff0c;设计为内存安全&#xff0c;无需动态分配&#xff0c;线程安全&#xff0c;所有中断事件都被推迟&#xff0c;然后在非 ISR 任务函数中处理。查看在线文档以获取更多详细信息。 源码链接&#xff…

Redis从入门到精通(十五)Redis分布式缓存(三)Redis分片集群的搭建和原理分析

文章目录 前言5.4 分片集群5.4.1 搭建分片集群5.4.2 散列插槽5.4.3 集群伸缩5.4.3.1 需求分析5.4.3.2 创建新的Redis实例5.4.3.3 添加新节点到Redis集群5.4.3.4 转移插槽 5.4.4 故障转移5.4.4.1 自动故障转移5.4.4.2 手动故障转移 5.4.5 RedisTemplate 5.5 小结 前言 Redis分布…

kali工具----枚举工具

一、枚举工具 枚举是一类程序&#xff0c;它允许用户从一个网络中收集某一类的所有相关信息。本节将介绍DNS枚举和SNMP枚举技术。DNS枚举可以收集本地所有DNS服务和相关条目。DNS枚举可以帮助用户收集目标组织的关键信息&#xff0c;如用户名、计算机名和IP地址等&#xff0c;…

【Qt】界面优化

目录 一、QSS 1.1 基本语法 1.2 QSS设置方法 1.2.1 指定控件样式设置 1.2.2 全局样式设置 1.2.3 从文件加载样式表 1.2.4 使用Qt Designer编辑样式 1.3 选择器 1.3.1 介绍 1.3.2 子控件选择器 1.3.3 伪类选择器 1.4 样式属性(盒模型) 1.5 代码示例(登录界面) 二、…

OSCP靶场--Banzai

OSCP靶场–Banzai 考点(ftp爆破 webshell上传web1访问403web2可以访问webshell反弹mysql udf提权) 1.nmap扫描 ## nmap扫描一定要使用 -p- 否则容易扫不全端口 ┌──(root㉿kali)-[~/Desktop] └─# nmap -sV -sC 192.168.158.56 -Pn -p- --min-rate 2500Starting Nmap 7.…

机器学习前导——PyCharm PyTorch Python3 机器学习

机器学习前导——PyCharm & pytorch & Python3 & 机器学习 文章目录 前言PyCharmPyTorchPython3机器学习联系 前言 这学期选了《机器学习》&#xff0c;第一次接触&#xff0c;对一些专有名词很陌生。 PyCharm PyCharm是一款由JetBrains开发的软件&#xff0c…

STM32 串口接收定长,不定长数据

本文为大家介绍如何使用 串口 接收定长 和 不定长 的数据。 文章目录 前言一、串口接收定长数据1. 函数介绍2.代码实现 二、串口接收不定长数据1.函数介绍2. 代码实现 三&#xff0c;两者回调函数的区别比较四&#xff0c;空闲中断的介绍总结 前言 一、串口接收定长数据 1. 函…

SpringBoot3 + Vue3 + Uniapp + uView + Elenment 实现动态二级分类以及二级分类的管理

SpringBoot3 Vue3 Uniapp uView Elenment 实现动态二级分类以及二级分类的管理 1. 效果展示1.1 前端显示效果1.2 后台管理一级分类1.3 后台管理二级分类 2. 后端代码2.1 GoodsCategoryController.java2.2.1 GoodsCategoryMapper.java2.2.2 GoodsCategorySonMapper.java2.3.…

Zookeeper的集群搭建和ZAB协议详解

Zookeeper的集群搭建 1&#xff09;zk集群中的角色 Zookeeper集群中的节点有三个角色&#xff1a; Leader&#xff1a;处理集群的所有事务请求&#xff0c;集群中只有一个LeaderFollwoer&#xff1a;只能处理读请求&#xff0c;参与Leader选举Observer&#xff1a;只能处理读…