_ENV
目前讨厌使用类。我试图创建一个拉丁语Lua,有些东西不能用_ENV
精确地制作,但效率要高得多。 setfenv
也不合作。
后续代码不断返回旧的attempt to call a nil value
错误。它指定了第20行,其中正在检查loadstring(),第23行,其中在主要块中调用__latin()
函数。
function __latin(code)
__predecessor = [===[
function typographia(value)
print(value);
end
chorda = {};
chorda.__index = chorda;
function chorda.sub(chorda, cChorda, fChorda)
return string.sub(chorda, cChorda, fChorda);
end
function chorda:sub(chorda, cChorda, fChorda)
return string.sub(chorda, cChorda, fChorda);
end
--[[ define values --]]
_ENV = {salve="Salve, munde!",typographia=typographia,print=print,chorda=chorda,chorda.sub=chorda.sub}; ]===];
__finalizer = __predecessor .. " " .. code;
local status, err = pcall(loadstring(__finalizer));
print(err);
if (err == nil) then loadstring(__finalizer)(); end
end
__latin('typographia(salve); chorda.sub(salve, 1, 3);');
答案 0 :(得分:2)
您正在“尝试调用零值”,因为loadstring
会返回nil
(因此您使用{{1}调用pcall
})。 nil
返回nil,因为您正在编译的代码(loadstring
)包含无效的Lua:
__predecessor
仅供参考:loadstring / pcall内容与您的问题无关。如果你stripped it out before posting,你自己会发现这个错误。