參考鏈接:
系列鏈接: Lua語法(一)
系列鏈接: Lua語法(二)——閉包/日期和時間
系列鏈接: Lua語法(三)——元表與元方法
系列鏈接: Lua語法(四)——協(xié)程
系列鏈接: Lua語法(五)——垃圾回收
系列鏈接: Lua語法(六)——面相對象編程
概述
關(guān)于閉包,模塊和包的概念。
Lua中的閉包、模塊和包都是用來組織和封裝代碼的機(jī)制。
閉包
閉包是指一個函數(shù)和其相關(guān)的環(huán)境變量的組合。當(dāng)一個函數(shù)在其外部定義的環(huán)境中使用某些變量時,這些變量將會保存在閉包中,使得函數(shù)可以在其定義之外的地方繼續(xù)使用這些變量。使用閉包可以實現(xiàn)很多高級的編程技巧,例如函數(shù)工廠、延遲計算等。
--閉包案例:url解碼
str = "word=%22%E4%BD%A0%E5%A5%BD%22;name=%22%E5%BC%A0%E4%BC%9F%22"
function urldecode(s)
s = string.gsub(s,"+"," ")
s = string.gsub(s,"%%(%x%x)",function (h)
return string.char(tonumber(h,16))
end)
return s
end
print(urldecode(str))
--輸出 word="你好";name="張偉"
模塊和包
Lua5.1以后,引入了模塊和包
可以將其他lua文件作為模塊,讓當(dāng)前l(fā)ua文件調(diào)用
模塊和包相關(guān)函數(shù)
dofile、loadfile和require 的區(qū)別
在Lua語言中,dofile、loadfile和require都是用于加載和執(zhí)行Lua代碼的函數(shù),但它們之間有一些區(qū)別。
dofile函數(shù)是最簡單的加載和執(zhí)行Lua代碼的方式。它接受一個文件路徑作為參數(shù),并返回執(zhí)行結(jié)果。dofile函數(shù)會直接加載并執(zhí)行指定路徑的Lua腳本文件,返回腳本的執(zhí)行結(jié)果。每次調(diào)用dofile函數(shù)都會重新加載和執(zhí)行腳本文件。
loadfile函數(shù)用于加載Lua代碼塊并返回一個函數(shù)。它接受一個文件路徑作為參數(shù),并返回一個函數(shù)對象,該函數(shù)可以用于多次執(zhí)行該代碼塊。loadfile函數(shù)只加載并編譯腳本文件,不會立即執(zhí)行代碼。調(diào)用返回的函數(shù)對象可以多次執(zhí)行代碼塊,每次執(zhí)行返回執(zhí)行結(jié)果。
require函數(shù)是用于加載和執(zhí)行Lua模塊的函數(shù)。它接受一個模塊名作為參數(shù),并返回模塊的返回值。require函數(shù)先檢查指定的模塊是否已經(jīng)加載,如果已經(jīng)加載則直接返回模塊的返回值。如果模塊尚未加載,則會搜索Lua模塊路徑來查找并加載對應(yīng)的Lua文件。require函數(shù)只會加載和執(zhí)行模塊一次,后續(xù)調(diào)用require函數(shù)會直接返回緩存的模塊返回值。
需要注意的是,dofile和loadfile可以加載任意的Lua代碼文件,而require函數(shù)則只能加載具有特定規(guī)范的Lua模塊文件。
案例:
如果模塊名和文件名不一致,那么需要將模塊所在的文件放到Lua根目錄下的lua文件夾里面
如果模塊名和文件名一致,則可以將模塊所在的文件和當(dāng)前文件放在同一個文件夾下,所以,建議讓模塊名和文件名保持一致
例如模塊名 叫 model ,那么文件名叫 model.lua為一致
否則模塊會require調(diào)用失敗文章來源:http://www.zghlxwxcb.cn/news/detail-850334.html
require
--model.lua
local model = {
}
model.wwww = function ()
print("test")
end
return model --這里不要忘記return
--test.lua
local mod =require("model") --可以自定義一個本地的名字
mod.wwww()
--輸出 test
dofile
讀取文件并直接運行文章來源地址http://www.zghlxwxcb.cn/news/detail-850334.html
--block.lua
print("here is block")
local function block()
print("bolck fun is doi
到了這里,關(guān)于Lua語法(二)——閉包/日期和時間的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!