0

_ENV現在、クラスの使用を嫌っています。私はラテン系の Lua を作成しようとしています。正確に作成できないものもありますが_ENV、はるかに効率的です。setfenv非協力的でもありました。後続のコードは古いエラー
を返し続けます。attempt to call a nil valueloadstring() がチェックされている行 20 と、メイン チャンクで__latin()関数を呼び出している行 23 を指定します。

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

1 に答える 1

2

が返されるため、「nil値を呼び出そうとします」というメッセージが表示されます(つまり、で呼び出しています)。 コンパイルしているコード()に無効なLuaが含まれているため、nilを返します。loadstringnilpcallnilloadstring__predecessor

_ENV = {
    chorda.sub = chorda.sub -- can't do this
}

参考:loadstring/pcallのものはあなたの問題とは無関係です。投稿する前にそれを取り除いていたら、このエラーを自分で見つけたでしょう。

于 2013-01-09T23:04:32.777 に答える