2011-12-22 6 views
4

私はLua用にLuaJavaとCコードを使用しています。 LuaをStringとしてどのようにロードできるかを知りたい言い換えれば、私は最初に.luaファイルを文字列に変換しています。私はこの文字列の内容をLuaにロードしたいのですか?私はloadstring関数が表示されますが、これがどのように呼び出されるかわかりません。私はLuaにこのファイルのファイルシステムを検索させたくないので、ファイルを見つけて文字列に変換してから、ファイル内容の文字列バージョンをロードしますか?また、後続の関数呼び出しのためにファイルからリロードせずにモジュールが利用可能なままであるかどうかをloadstring()を呼び出した後に知りたい。ありがとう。ファイルの代わりにLuaモジュールを文字列としてロードするにはどうすればよいですか?

答えて

3

は、あなたが機能LuaState.LloadString(String source)を使用することができます。

ソースから「モジュール」を複数回ロードしたくない場合は、そのモジュールに名前を割り当てて、フラグをテーブルに保存する必要があります。モジュールをソースから再度ロードできるように、「アンロード」を提供することもできます。それは次のようにLuaで再実装することができます:

do 
    local loadedModules = {} -- local so it won't leak to _G 
    function loadModule(name, source) 
    if loadedModules[name] then return loadedModules[name] end 
    loadedModules[name] = assert(loadstring(source))() or true 
    end 
    function unloadModule(name) 
    loadedModules[name] = nil 
    end 
end 
+0

ありがとうございます。私はそれがロードされ、結果の値を取得した後、javaからルア関数を呼び出す別の問題があります。これを見てください:http://stackoverflow.com/questions/8611948/lua-getting-result-back-in-luajava-from-lua-function-call – Androider

1

は、私が質問を理解していないが、ここに行く:あなたが/ロードLuaJavaから文字列をコンパイルする必要がある場合は

local f = io.open(filename) 
local s = f:read '*a' -- read the entire contents of the file 
f:close() 
assert(loadstring(s))() -- parse and run string `s` as Lua code 
+1

私は彼がホスト言語で話していると確信しています、ルアではありません。 –

+0

はい、私が正確にやろうとしていることは、Androidアプリケーションのリソース文字列としてLuaファイルを読み込むことです。したがって、Luaはファイルを読むことはありませんが、文字列を取り込むだけです。ですから、LuaJavaやC言語からloadstringを実行する方法を知る必要があると思います。 – Androider

+0

また、上記のコードを実行した後に、その後のluaコードでファイル内のそのモジュールを探すことなく、 'module_defined_in_filename'を正常に実行できることを確認する必要があります。 – Androider

関連する問題