自学内容网 自学内容网

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

读取文件并直接运行

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

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

原文地址:https://blog.csdn.net/qq_44653106/article/details/137568931

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!