Lua スクリプトを定期的に実行するアプリケーションがあります。スクリプト内で、いくつかのパラメーターをチェックし、Lua スクリプトを続行するか終了するかを決定するために、カスタムの登録済み Lua 関数を作成することがあります。ロジックは理想的にはスクリプトの一部であってはならず、Lua スクリプトを使用してこれを回避することを考えることができますが、アプリケーションを終了せずに Lua スクリプトの実行を停止できるかどうか疑問に思っています。
Delphi で記述され、Lua 5.1 を使用して Lua スクリプトに公開されたカスタム関数があります。Lua スクリプトは次のようになり、Lua のスクリプトは を使用して開始されluaL_loadbuffer
ます。
io.write("Script starting\n");
--Custom Function
ExitIfFound();
io.write("Script continuing\n");
私のカスタム関数は次のようになります。以下にlua_error
、スクリプトを停止するために使用しようとした試みの1つを提供します...
function ExitIfFound(LuaState: TLuaState): Integer;
var
s: AnsiString;
begin
s := 'ExitIfFound ending script, next Lua script line not called';
lua_pushstring(LuaState, PAnsiString(s));
lua_error(LuaState);
end;
カスタム関数が呼び出されたとき、それ以上評価せずに Lua スクリプトを終了する方法がわかりません。setjmp
Lua に言及し、C でandを使用している投稿を見たことがありlongjmp
ますが、これらが Delphi をどのように翻訳するのか興味があります。
上記の例では、 を使用するlua_error
と、プログラム全体がクラッシュし、Windows は通常の動作を行い[luarun.exe has stopped working]
ます...
これらすべてを踏まえて、私はまだ Lua を Delphi に統合するのにかなり慣れていないので、探索するためのよりクリーンなオプションを見つけられることを願っています。