8

lua関数チャンクを文字列にダンプする方法は?

function test(a, b)
  local c = a + b
  return c
end

print( type(test) )  --> function
print( test )         --> function: 0053B108
print( dumpToString(test) )

dumpToString の結果が次のようになることを望みます:

function test(a, b)
  local c = a + b
  return c
end

これを行う方法 ?

=== update1 ===
自動的にログを記録してコードを挿入したい。

4

5 に答える 5

6

なぜこれをしたいのか、あなたは言いません。これは重要かもしれません。関数を文字列にダンプできますが、非常に読みやすい文字列にはなりません。この方法で関数を保存および送信できます (互換性のある Lua エンジン間で):

string.dump(function() print "Hello" end)
于 2013-02-06T16:58:58.987 に答える
3

あなたはそうしない。Lua は、コンパイルされた Lua スクリプトを生のテキストとしてどこにも保存しません。また、小さなスクリプト言語を意図しているため、独自のバイトコードを逆コンパイルするメカニズムも提供していません。

于 2013-02-06T03:51:28.457 に答える
1

複数行のコードをすべて 1 つの文字列変数に格納できます。引用符の代わりに二重角括弧を使用してください。

chunk = [[
function test(a, b)
  local c = a + b
  return c
end
]]
于 2013-02-12T06:32:14.017 に答える
-2

プログラムのソースコードは次の方法で取得できます。

local source_code = io.open(arg[0]):read'*a'

それを解析して関数定義を見つけます。
コマンドラインからluaを実行し、バイトコードファイルではなく、ソースファイルをパラメーターとして渡す場合にのみ機能します。

于 2013-02-06T07:14:22.357 に答える