lua的模块与类

模块

在编写程序不可能将所有的代码都放置到一个文件,那会将写出的代码变得像老太太的裹脚布,又臭又长,而且在可阅读性上也很低,逻辑上也会混乱不堪。所以就有了模块,将同样功能或者相似功能的代码放在一个文件中,在需要使用时直接调用,而不用考虑其中的实现细节,使用起来就很方便了,而且整个代码逻辑也会清晰很多,这就是模块的作用。

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的元表

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值