5

私は LuaJava と Lua 用の C コードを使用しています。私がやろうとしているのは、Android アプリケーションにリソース文字列として保存されている Lua ソースを読み込んで、読み込んだ Lua ソースを実行できるようにすることです。LuaJava または C 言語を使用してこれを行う方法を知る必要があります。

文字列を使用して Lua で Lua モジュールを作成する方法を知りたいです。

つまり、代わりに .lua ファイルに格納される Lua ソースを文字列に格納しています。次に、この文字列の内容を、呼び出し可能な利用可能なモジュールとして Lua にロードします。

関数があるloadstring()ようですが、LuaJava または C でこれを呼び出す方法がわかりません。

Lua にこのファイルのファイル システムを検索させたくないので、ファイルを見つけて文字列に変換します。文字列を取得したら、ファイルの内容の文字列のコピーをモジュールとして Lua にロードして呼び出す方法を知る必要があります。

loadstring(s)また、モジュールを呼び出した後、リロードせずに後続の関数呼び出しに使用できるかどうかも知りたいですloadstring()

4

2 に答える 2

3

LuaJava から文字列をロード/コンパイルする必要がある場合は、関数を使用できます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
于 2011-12-22T19:27:19.090 に答える
1

私は質問を理解しているかどうかわかりませんが、ここに行きます:

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
于 2011-12-22T05:27:24.980 に答える