模块

最后更新于:2022-04-01 03:26:59

## 模块 Lua中有一个叫`module`的公有函数,此函数的作用是将一组变量和函数打包在一个模块名下,便于其他文件`require`。但是这个函数受到了诸多的[指责](http://lua-users.org/wiki/LuaModuleFunctionCritiqued),原因是其会创建一个公共变量,并且这个公共变量中的所有细节都会暴露出来。这其实十分不符合面向对象的规范。 以下有一种办法可以避免这个问题,即不采用`module`函数进行打包。 ~~~ -- hello/mytest.lua local M = {} -- 私有变量 local function test() print(123) end function M.test1() test() end function M.test2() M.test1(); M.test1() end return M -- 关键 ~~~ 以下是导入此模块的方法。 ~~~ local MT = require "hello.mytest" MT.test2() ~~~ Lua内没有类这个变量类型,但是通过Lua的`metatable`可以轻松实现类的继承,多态等等特性。关于Lua中类的实现原理,请参考我之前写的这篇博客:[Lua中实现类的原理](http://wuzhiwei.net/lua_make_class/)。
';