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

这篇具有很好参考价值的文章主要介绍了Lua语法(二)——闭包/日期和时间。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

概述

关于闭包,模块和包的概念。
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
end

print(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")
end

return model		--这里不要忘记return

--test.lua
local mod =require("model")	--可以自定义一个本地的名字

mod.wwww()
--输出	test
dofile

读取文件并直接运行文章来源地址https://www.toymoban.com/news/detail-850334.html

--block.lua
print("here is block")

local function block()
    print("bolck fun is doi

到了这里,关于Lua语法(二)——闭包/日期和时间的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • lua基本语法使用

    1.基本语法 2.标识符 全局变量和局部变量 4.ipairs() 和 pairs() 函数的区别 lua中只有false和nil为false,其余都为true 数据类型 number [[]] 可以包含换行的字符串 字符串与数字做数学运算时,优先将字符串转成数字 5.数据类型 -- table 6.数据类型---其他 7.索性 8.循环 流程控制 10.函数 可以

    2024年02月05日
    浏览(39)
  • Lua语法学习

    Lua 区分大小写 单行注释 -- ctrl+Q 然后在罗布乐思编辑器里面好像是ctrl+? 变量 在默认情况下,变量总是认为是全局的。(除非用 local 显式声明为局部变量)全局变量不需要声明,给一个变量赋值后即创建了这个全局变量,访问一个没有初始化的全局变量也不会出错,只不过得

    2024年02月15日
    浏览(43)
  • Lua语法入门

    Lua是一种轻量级的脚本语言,它使用标准C语言编写,并以源代码形式开放。它的设计目标是嵌入到应用程序中,为应用程序提供灵活的扩展和定制功能。您可以在官方网站https://www.lua.org/上了解更多关于Lua的信息。 Lua经常被嵌入到C语言开发的程序中,例如游戏开发和游戏插

    2024年02月14日
    浏览(38)
  • Lua04——基本语法

    单行注释 多行注释 标识符用于定义变量,作为变量名在程序中使用。 以字母及下划线开头,可以包含数字。 需要注意的是: 不能定义为下划线+大写字母,避免与Lua中的保留字冲突; 标识符中不能包含@ $ % 等特殊字符; lua中字母区分大小写 在默认情况下,变量都是全局变

    2024年02月09日
    浏览(39)
  • Lua语法结构

    **and ** break **do ** else **elseif ** **end ** false for **function ** if in local nil not or repeat return then true until **while ** nil ** boolean** ** number** ** string** ** function** ** userdata** thread ** table** ```lua –string print(“hello”…“world”); print(“1”…“2”) print(type(“1”…“2”)) – 12 string print(“1”+“

    2024年02月09日
    浏览(34)
  • Lua语法之简单变量

    运行结果

    2024年02月07日
    浏览(38)
  • lua语法学习笔记(速成版)

    使用官方的浏览器测试网站进行代码测试。wiki.loatos.com 创建变量 类似python,直接赋值即生成全局变量; 加 local 变成 仅本文件使用变量; 数据类型 nul和number 未被声明(或叫创建)的值都是 nul,类似NULL。 number 数值型,支持16进制表示法和科学计数法。 字符串 单引号

    2024年02月05日
    浏览(51)
  • Redis Lua脚本执行原理和语法示例

    在学习本文之前,我是强烈建议大家了解一下我的其他两篇博客 《Redis 从入门到精通【进阶篇】一文学会Lua脚本》 《Redis 从入门到精通【进阶篇】之Lua脚本详解》 Redis通过嵌入Lua解释器,实现了对Lua脚本的执行。在执行过程中,Redis保证了脚本的原子性和阻塞性,同时通过脚

    2024年02月12日
    浏览(43)
  • 【LUA】时间面板显示

    最近看了个HS的时间显示的例子,顺便学习了一下这个lua定义函数的方法,被折腾了许久,最后竟然是gpt解答了。 定义方式 在这个示例中,我们定义了一个名为 myObject 的对象,它有一个布尔属性 isVisible,初始值为 false。然后,我们使用 function obj:toggleShow() 语法定义了 toggl

    2024年02月20日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包