当前位置:网站首页>lua的模块与类
lua的模块与类
2022-08-10 05:36:00 【yeah_you_are】
模块
在编写程序不可能将所有的代码都放置到一个文件,那会将写出的代码变得像老太太的裹脚布,又臭又长,而且在可阅读性上也很低,逻辑上也会混乱不堪。所以就有了模块,将同样功能或者相似功能的代码放在一个文件中,在需要使用时直接调用,而不用考虑其中的实现细节,使用起来就很方便了,而且整个代码逻辑也会清晰很多,这就是模块的作用。
lua定义模块
在以往lua定义方式是通过 module
来实现的,但是现在官方已经不提倡这种写法了,原因有两点:一、这种方式会破坏模块的高内聚;二、该方法会返回一个包含该模块的table,并还会定义一个全局变量,这会污染全局环境变量。推荐模块定义方法如下:
test.lua
-- 测试模块
local _M = {
_VERSION = "0.0.1", _NAME = "test", class_type = ""}
-- 打印
function _M.print(content)
print(content)
end
return _M
这里就定义了一个test模块,在table _M 中设置了版本_VERSION、名称 _NAME 和模块类型 class_type,模块中定义了一个函数 print() ,最后的return语句结束模块定义。
加载调用模块
lua模块可以使用内建函数 require() 来加载和缓存。
test_load.lua
-- 加载模块
local test = require("test")
-- local test = require "test" -- 这样也是允许的
test.print("hello world!")
这样就可以实现模块加载和调用了,注意这里的文件 test.lua 和文件 test_load.lua 是在同一目录路径下的,如果文件路径是 /src/util/test.lua 和 /src/test_load.lua ,文件 test_load.lua 中加载 test 模块的语句就应该修改为 local test = require "util.test"
,这样方可有效,否则会报文件找不到的错误。
定义类-面向对象编程
当知道了如何定义模块后,就可以尝试引入面向对象编程思想来定义一个类了。以下代码就是尝试定义一个猫。
local _M = {
}
-- 类的构造方法
function _M.new(self,name,color)
local o = {
}
setmetatable(o, self)
self.__index = self
-- 猫的名字
self.name = name
-- 猫的颜色
self.color = color
return o
end
-- 方法
function _M.eat(self)
print("the cat " .. self.name .. "is eatting.")
end
return _M
那么这里的 setmetatable() 函数, __index 都是什么,请参照lua的元表 。
边栏推荐
- Pytorch - 07. Multidimensional characteristics of input processing
- 二维卷积定理的验证(下,cv2.filter2D())
- 样条曲线(下)之插值问题(贝塞尔曲线、B样条和一般样条曲线插值)
- 常用模块封装-csv文件操作封装
- 在Unity中让物体围绕自身的x、y、z轴进行旋转(亲测有效)
- 【fiddler2】使用fiddler mock response 数据
- 基于MNIST数据集的简单FC复现
- GC0053-STM32单片机NTC热敏电阻温度采集及控制LCD1602
- pytorch-08. Load dataset
- ASP.Net利用代码点击相应按钮来关闭当前的页面(亲测有效)
猜你喜欢
LeetCode 1720. Decoding XORed Arrays (Simple)
Deep learning TensorFlow entry environment configuration
LeetCode 100.相同的树(简单)
STM32F407ZG 串口通信+固定帧头帧尾传输数据帧
STM32F407ZG PWM
51单片机手动自动智能窗户窗帘控制系统手动自动定时
The way for programmers to make money from a sideline business and increase their monthly income by 20K
在Unity中利用代码动态更改场景中的天空盒
STM32F407ZG TIM通用定时器
【fiddler2】使用fiddler mock response 数据
随机推荐
51单片机智能远程遥控温控PWM电风扇系统红外遥控温度速度定时关机
LeetCode 2011.执行操作后的变量值(简单)
pytorch-06. Logistic regression
Gradle学习 (一) 入门
Linux的文件IO与标准IO,以及IO缓存
LaTeX总结----在CSDN上写出数学公式
51单片机手动自动智能窗户窗帘控制系统手动自动定时
以STM32F103C6TA为例通过配置CubeMX实现GPIO输出完成点灯实例
Radon 变换原理和应用
LeetCode 1351.统计有序矩阵中的负数(简单)
pytorch-10. Convolutional Neural Networks
Notes for Netual Network
常用模块封装-pymysql、pymongo(可优化)
从零开始构建Google Protocol Buffer / protobuf 的helloworld工程(超级详细)
【C语言】结构体变量学习笔记1
PyTorch之模型定义
中间件-Rocktmq
STM32F407ZG GPIO输出相关实验
C陷阱与缺陷 个人阅读笔记
2022李宏毅机器学习hw1--COVID-19 Cases Prediction