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

相关推荐

  1. Lua语法()——/日期时间

    2024-04-13 06:26:02       19 阅读
  2. golang学习-匿名函数

    2024-04-13 06:26:02       38 阅读
  3. iOS Block的区别

    2024-04-13 06:26:02       42 阅读
  4. python -装饰器

    2024-04-13 06:26:02       14 阅读
  5. Python 日期时间

    2024-04-13 06:26:02       8 阅读
  6. 【python】时间日期

    2024-04-13 06:26:02       8 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-13 06:26:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-13 06:26:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-13 06:26:02       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-13 06:26:02       20 阅读

热门阅读

  1. Apache Storm的详细配置

    2024-04-13 06:26:02       18 阅读
  2. 优雅关闭jar程序shell 脚本

    2024-04-13 06:26:02       20 阅读
  3. Gateway基本配置与使用介绍

    2024-04-13 06:26:02       19 阅读
  4. NVIC中断分组和配置

    2024-04-13 06:26:02       17 阅读
  5. 多线程交替打印

    2024-04-13 06:26:02       32 阅读
  6. 简单了解仿真测试

    2024-04-13 06:26:02       20 阅读
  7. 【技术支持】禁止html中referer

    2024-04-13 06:26:02       19 阅读
  8. .NET 设计模式—策略模式(Strategy Pattern)

    2024-04-13 06:26:02       20 阅读
  9. Docker 安装Kali Linux作为攻防演练的工具

    2024-04-13 06:26:02       36 阅读
  10. 设计模式-策略模式

    2024-04-13 06:26:02       19 阅读