Lua——load和loadstring函式用法

兩水先木示發表於2020-11-18

目錄

Lua環境例項說明

允許傳參的形式load函式


位於如下包體封裝好的load函式 (等同於直接在Lua環境執行的loadstring函式)


load(chunk, chunkname, mode, env)

Lua環境例項說明

a = 100
local content = [[
    return a
]]
local func = loadstring(content)
print(func())

等同於

a = 100
local func = function()
    return a     
end
print(func())

若報錯bad argument #1 to 'loadstring' ... ,把loadstring改為load即可(同理,可能是load函式報錯,則改為loadstring)  這可能是不同環境採用的lua庫不同導致的,直接使用編輯器執行lua程式碼是使用loadstring函式,否則可能是load函式。報錯如下:

lua.exe AA.lua
lua.exe: AA.lua:9: bad argument #1 to 'load' (function expected, got string)
stack traceback:
    [C]: in function 'load'
    AA.lua:9: in function 'AFunc'
    AA.lua:14: in main chunk
    [C]: ?

允許傳參的形式load函式

local A = {}
function A:AFunc()
    local content = [[
        return function(self)
            return self.id > 100
        end
    ]]
    self.id = 1000
    local loadFunc = load(content) --load返回的是一個無參匿名方法
    local myFunc = loadFunc()      --執行load返回的方法,拿到content字串裡寫的有參匿名方法
    local boolValue = myFunc(self) --執行有參匿名方法,傳遞self進去,返回boolean值(true)
    print(boolValue)
end
A:AFunc()

等同於

local A = {}
function A:AFunc()
    self.id = 1000
    local loadFunc = function()
        return function(self)
            return self.id > 100
        end
    end
    local myFunc = loadFunc()        
    local boolValue = myFunc(self)
    print(boolValue)
end
A:AFunc()

即 load(content) 等同於  function() content end   (目前我發現無法給這個function()傳任何引數,但可以通過我上面的傳參的例子進行實現)

  注意:content是一個[[]]包括的字串,它裡面的特殊字元是無效的,若content不寫return是會報錯的!

相關文章