Garbage Collection

塵も積もれば山

目次

Blog 利用状況

ニュース

C++とかC#とか数学ネタを投下していく予定です。

[その他のページ]
日々の四方山話を綴った日記出水の日記帳

書庫

日記カテゴリ

[Lua]関数と変数は装備しないと意味ない

今回はluaL_loadfile関数とluaL_dofile関数の違いです。(正式にはマクロだけど)
どちらも、ファイルからLuaスクリプトを読み込む関数なのですが、
luaL_loadfile関数は読みこむだけ、luaL_dofile関数は読みこんだ後スクリプトを実行をします。

Luaでこんなプログラムを読みこむ事を考えます。

function foo()
  print "call foo"
end

function hoo()
  print "call hoo"
end

C言語からfooやhooを呼び出しながら使う、という事を想定していますが、
ここで読みこむ時はluaL_dofile関数を使う必要があります。

C言語に慣れていると、luaL_loadfile関数で読みこむだけで中間コードへの変換は出来ているから、
実行する必要はない、と考えてしまうのですが、それは間違いです。

先ほどのスクリプトを書き換えるとこうなります。

foo = function()
  print "call foo"
end

hoo = function()
  print "call hoo"
end

以上でわかるとおり、グローバル変数のfoo, hoo に関数の内容を代入するために
スクリプト全体を実行する必要があるのです。
Luaには関数宣言に当たるものがないので、中間コードに変換されているだけでは意味を持ちません。

バッファから読み込む場合は、luaL_loadbuffer関数を使いますが、
luaL_dofile関数に当たる関数はないので、lua_pcall関数を使って実行する必要があります。

投稿日時 : 2009年10月31日 3:35

Feedback

No comments posted yet.
タイトル
名前
Url
コメント