Lua 中引入一個模塊,可以采用兩種方式:import 和 require 方式,具體的區別在於:
載入一個模塊
import() 與 require() 功能相同,但具有一定程度的自動化特性。
假設我們有如下的目錄結構:
~~~
app/
app/classes/
app/classes/MyClass.lua
app/classes/MyClassBase.lua
app/classes/data/Data1.lua
app/classes/data/Data2.lua
~~~
MyClass 中需要載入 MyClassBase 和 MyClassData。如果用 require(),MyClass 內的代碼如下:
~~~ lua
local MyClassBase = require("app.classes.MyClassBase")
local MyClass = class("MyClass", MyClassBase)
local Data1 = require("app.classes.data.Data1")
local Data2 = require("app.classes.data.Data2")
~~~
假如我們將 MyClass 及其相關文件換一個目錄存放,那么就必須修改 MyClass 中的 require() 命令,否則將找不到模塊文件。
而使用 import(),我們只需要如下寫:
~~~ lua
local MyClassBase = import(".MyClassBase")
local MyClass = class("MyClass", MyClassBase)
local Data1 = import(".data.Data1")
local Data2 = import(".data.Data2")
~~~
當在模塊名前面有一個"." 時,import() 會從當前模塊所在目錄中查找其他模塊。因此 MyClass 及其相關文件不管存放到什么目錄里,我們都不再需要修改 MyClass 中的 import() 命令。這在開發一些重復使用的功能組件時,會非常方便。
我們可以在模塊名前添加多個"." ,這樣 import() 會從更上層的目錄開始查找模塊。
~
不過 import() 只有在模塊級別調用(也就是沒有將 import() 寫在任何函數中)時,才能夠自動得到當前模塊名。