Lua——load和loadstring函数用法

目录

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是会报错的!

猜你喜欢

转载自blog.csdn.net/qq_39574690/article/details/109788382