当前位置:网站首页>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官方教程简易笔记 EP2
解析树字符串并输出中序遍历
Gradle学习(二)Groovy
详解 Hough 变换(上)基本原理与直线检测
【接口自动化】
pytorch-11. Convolutional Neural Network (Advanced)
二维卷积定理的验证(上)
STM32单片机手机APP蓝牙高亮RGB彩灯控制板任意颜色亮度调光
LeetCode 162. Finding Peaks (Moderate)
PyTorch的安装与基础知识
LeetCode 94. Inorder Traversal of Binary Trees (Simple)
离散数学的学习记录
序列化、编码、requests库json和data参数
LeetCode 938.二叉搜索树的范围和(简单)
【fiddler3】使用fiddler设置弱网模式
【fiddler2】使用fiddler mock response 数据
Linux的文件IO与标准IO,以及IO缓存
mysql使用常见问题和解决
Exploratory Data Analysis EDA
LeetCode refers to offer 10-I. Fibonacci sequence (simple)