lua内嵌执行string
我们都知道loadstring可以把字符串加载成function,然而,local变量和upvalue变量却不能被传入这个function。
因此“script”函数应运而生,先上代码:
function script(s) local prefix,suffix = "","" local function lcpairs(l) l = l or 2 local i = 0 return function() i = i + 1 local n,v = debug.getlocal(l,i) return n and i, n, v end end local function insertvalue(i,n,v) prefix = prefix..("local %s = %s\n"):format(n,stringify(v)) suffix = suffix..("debug.setlocal(2,%s,%s)\n"):format(i,n) end for i,n,v in lcpairs(3) do insertvalue(i,n,v) end local codes = prefix..s..suffix return loadstring(codes) end local a = "sss" script[[ print("a",a) a = "good!!!" ]]() --a sss print("a",a) --a good!!!
说明:
stringify的作用是任意对象转换成字符串,详情参考上一篇