lua中函数

这篇博客探讨了Lua中的require()、import()和module()函数。require()函数确保模块只加载一次,通过findloader找到加载器并设置package.loaded。import()提供了一个使用相对路径加载包的便捷方式。module()函数用于创建模块,它默认不访问上级环境变量_G,但可以通过package.seeall启用。同时,文章展示了如何在模块中设置全局变量和环境。

require() 不会重复加载。

  1. --require 函数的实现    
  2. function require(name)    
  3.     if not package.loaded[name] then    
  4.         local loader = findloader(name) //这一步演示在代码中以抽象函数findloader来表示    
  5.         if loader == nil then    
  6.             error("unable to load module" .. name)    
  7.         end    
  8.         package.loaded[name] = true    
  9.         local res = loader(name)    
  10.         if res ~= nil then    
  11.             package.loaded[name] = res    
  12.         end    
  13.     end    
  14.     return package.loaded[name]    
  15. end 


import()

同require功能,加载包更方便,可以用相对路径



module()的功能如下,默认不能方位上一级环境变量(_G),module(..., package.seeall)即可


local moduleName = ...
 
local M = {}    -- 局部的变量
_G[moduleName] = M     -- 将这个局部变量最终赋值给模块名
 
package.loaded[moduleName] = M
 
local _G = _G -- 保存了全局的环境变量
setfenv(1, M)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值