日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

import与require的区别

發(fā)布時(shí)間:2025/3/20 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 import与require的区别 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

載入一個(gè)模塊
import() 與 require() 功能相同,但具有一定程度的自動(dòng)化特性。
假設(shè)我們有如下的目錄結(jié)構(gòu):
~~~
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 內(nèi)的代碼如下:
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 及其相關(guān)文件換一個(gè)目錄存放,那么就必須修改 MyClass 中的 require() 命令,否則將找不到模塊文件。
而使用 import(),我們只需要如下寫:
local MyClassBase = import(".MyClassBase")
local MyClass = class("MyClass", MyClassBase)
local Data1 = import(".data.Data1")
local Data2 = import(".data.Data2")

當(dāng)在模塊名前面有一個(gè)"." 時(shí),import() 會(huì)從當(dāng)前模塊所在目錄中查找其他模塊。因此 MyClass 及其相關(guān)文件不管存放到什么目錄里,我們都不再需要修改 MyClass 中的 import() 命令。這在開發(fā)一些重復(fù)使用的功能組件時(shí),會(huì)非常方便。
我們可以在模塊名前添加多個(gè)"." ,這樣 import() 會(huì)從更上層的目錄開始查找模塊。

不過 import() 只有在模塊級別調(diào)用(也就是沒有將 import() 寫在任何函數(shù)中)時(shí),才能夠自動(dòng)得到當(dāng)前模塊名。如果需要在函數(shù)中調(diào)用 import(),那么就需要指定當(dāng)前模塊名:
~~~ lua
# MyClass.lua
# 這里的 ... 是隱藏參數(shù),包含了當(dāng)前模塊的名字,所以最好將這行代碼寫在模塊的第一行
local CURRENT_MODULE_NAME = ...
local function testLoad()
? ? local MyClassBase = import(".MyClassBase", CURRENT_MODULE_NAME)
? ? # 更多代碼
end
~~~


@param string moduleName 要載入的模塊的名字
@param [string currentModuleName] 當(dāng)前模塊名
@return module

function import(moduleName, currentModuleName)
? ? local currentModuleNameParts
? ? local moduleFullName = moduleName
? ? local offset = 1


? ? while true do
? ? ? ? if string.byte(moduleName, offset) ~= 46 then -- .
? ? ? ? ? ? moduleFullName = string.sub(moduleName, offset)
? ? ? ? ? ? if currentModuleNameParts and #currentModuleNameParts > 0 then
? ? ? ? ? ? ? ? moduleFullName = table.concat(currentModuleNameParts, ".") .. "." .. moduleFullName
? ? ? ? ? ? end
? ? ? ? ? ? break
? ? ? ? end
? ? ? ? offset = offset + 1


? ? ? ? if not currentModuleNameParts then
? ? ? ? ? ? if not currentModuleName then
? ? ? ? ? ? ? ? local n,v = debug.getlocal(3, 1)
? ? ? ? ? ? ? ? currentModuleName = v
? ? ? ? ? ? end


? ? ? ? ? ? currentModuleNameParts = string.split(currentModuleName, ".")
? ? ? ? end
? ? ? ? table.remove(currentModuleNameParts, #currentModuleNameParts)
? ? end


? ? return require(moduleFullName)
end

轉(zhuǎn)載于:https://www.cnblogs.com/ljygoodgoodstudydaydayup/p/4527236.html

總結(jié)

以上是生活随笔為你收集整理的import与require的区别的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。