luaのコンパイル、デバッグ、実行

2448 ワード

私たちはLuaを解釈型言語としていますが、Luaはまずコードを中間コードにプリコンパイルしてから実行します(多くの解釈型言語がそうしています).解釈型言語ではコンパイル段階が不適切に聞こえるが、解釈型言語の特徴は、コンパイルされているかどうかではなく、コンパイラが言語実行時の一部であるため、コンパイルを実行して生成される中間コードの速度が速くなる.関数dofileの存在はLuaを解釈言語として呼び出すことができることを示していると言える.dofileは実際には補助的な関数です.本当に機能を完了する関数はloadfileです.dofileとは異なり、loadfileはコードを中間コードにコンパイルし、コードを実行せずにコンパイル後のchunkを関数として返す.またloadfileはエラーメッセージを投げ出すことなくエラー世代を返す.dofileをこのように定義できます
loadfile--コンパイルするだけで、loadfileを実行しないので、名前が不思議で、ファイルをロードするだけで、コードをコンパイルして、ファイルの中のコードを実行しません.例えばhellofileがありますluaファイル
print(“hello”);
function hehe()
    print(“hello”);
end

このファイルにはコードと関数があります.loadfileでこのファイルをロードしてみてください.次のコードです.
loadfile("hellofile.lua");
print("end");  --      end,            

dofile--実行は明らかで、dofileはコードを実行するやつで、以下のコードです.
 dofile("E:/Android/wordspace_cocosIDERc0/CocosLuaTest/src/hellofile.lua");
 print("end"); --    hellofile.lua     end

require関数Luaは、実行ライブラリをロードするための高度なrequire関数を提供します.大雑把に言えばrequireとdofileは同じ機能を完成したが、2つの違いがある:1.requireはディレクトリロードファイルを検索します.requireは、ファイルがロードされているかどうかを判断し、同じファイルを繰り返しロードしないようにします.上記の特徴のため、requireはLuaでライブラリをロードするより良い関数です.requireは、ファイルを初めてロードするときに、中のコードを実行します.2回目以降、ファイルを再度ロードすると、繰り返し実行されません.すなわち、ロードされたファイルは保存され、テストコードは次のように繰り返しロードされません.
   for i = 1, 2, 1 do
        require("hellofile.lua");
    end
    print("end");
//require,      hello end