_ENV& Lua中的类不兼容

时间:2013-01-09 21:29:30

标签: lua env

_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);'); 

1 个答案:

答案 0 :(得分:2)

您正在“尝试调用零值”,因为loadstring会返回nil(因此您使用{{1}调用pcall })。 nil返回nil,因为您正在编译的代码(loadstring)包含无效的Lua:

__predecessor

仅供参考:loadstring / pcall内容与您的问题无关。如果你stripped it out before posting,你自己会发现这个错误。