## 模塊
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/)。