lua编写模块

本文介绍了Lua中编写模块的要点,包括模块名与文件名的一致性、使用局部表实现私有与共有、通过环境管理函数和变量,以及如何通过元表保持全局变量的访问。提供了两种模块编写方法:一是创建包含导出函数的table并返回;二是遵循模块编写注意事项进行调整。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

编写模块注意的地方:

1.模块名必须与文件名相同

2.创建局部表来封装模块 达到私有性 共有性 

3.将局部表赋给模块名后 摆脱函数对模块名的依赖 这样改变模块名只需改变文件名即可

4.利用环境解决 函数和变量依赖局部表名的调用

5.利用环境会造成当前环境不能访问外部的全局变量 可以通过设置元表 让当前全局变量_G继承外部的_G

 

 

方法一

创建一个table 并将所有需要导出的函数放入table中 最后返回这个table,代码如下:

complex.lua

complex = {}

function complex.new(r, i)
	return {r = r, i = i}
end

--定义一个常量
complex.i = complex.new(10, 20)

function complex.add(c1, c2)
	return complex.new(c1.r + c2.r, c1.i + c2.i)
end

function complex.sub(c1, c2)
	return complex.new(c1.r - c2.r, c1.i - c2.i)
end

return complex

别的文件可以通过require "complex"

 require "test" --require 会将模块名作为形参传到被调用函数中

print(rt)

c1 = test.new(100, 200)
c2 = test.new(100, 200)

local ret = test.add(c1, c2)
print(ret.r, ret.i)

方法二 遵守模块编写注意点调整后的模块

local moduleName = ...
local M = {} --局部表封装模块
_G[moduleName] = M --摆脱函数与模块名限制
package.loaded[moduleName] = M  --解决return modname的功能
setmetatable(_G,{_index = _G}) --解决可以访问外部全局变量
setfenv(1, M) --为模块提供独立的全局环境 不要通过表名写函数和变量


function new(r, i)
	return {r = r, i = i}
end

i = new(10, 20)

function add(c1, c2) --可以不加表名写函数
	return new(c1.r + c2.r, c1.i + c2.i)
end

function sub(c1, c2)
	return new(c1.r - c2.r, c1.i - c2.i)
end

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值