参考链接:
系列链接: 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调用失败文章来源:https://www.toymoban.com/news/detail-850334.html
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模板网!