目录
位于如下包体封装好的load函数 (等同于直接在Lua环境执行的loadstring函数)
load(chunk, chunkname, mode, env)
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]: ?
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是会报错的!