9

またはを持たない言語でまたはをシミュレートする方法はありますか?try-finallytry-except

ランダムで予測できない例外が発生した場合は、クリーンアップが実行されていることを確認する必要があります。

例外がスローされないようにすることができます。そうすれば、クリーンアップコードが常に実行されると確信できますが、その場合は、は必要ありませんtry-finally/except

この瞬間、私はtry-finallyLuaでを作成しようとしています。しかし、どのソリューションも他の言語でも機能すると思います。

しかし、私の人生では、言語インフラストラクチャによって提供される配管なしで例外を処理する方法を理解することはできません。

しかし、尋ねることを傷つけることはありません。

4

4 に答える 4

14

Luaには、例外とまったく同じように何かを行うために必要なメカニズムがすでにあります。つまりpcall

を使用pcallして、任意のLua関数を実行できます。その関数(またはそれが呼び出す関数)が呼び出すerror(アサーション条件が真でない場合にassert呼び出す)場合、フロー制御はステートメントerrorのサイトに戻ります。pcallpcallfalseとエラーメッセージ(に渡されるものerror)を返します。

これにより、エラーを「スロー」して「キャッチ」することができます。あなたの「試してみる」はただのpcall; 「catch」ステートメントは、pcall結果をチェックするものです。

また、覚えておいてください。Luaはガベージコレクション環境です。クリーンアップ作業を行う必要はありません。または、そうする場合は、Luaモジュールが必要とするものを変更する必要があります。Lua APIは、CまたはC++APIではなくLuaAPIである必要があります。

于 2012-01-02T02:31:22.433 に答える
2

luaでプログラムしたことはありません(これはあなたがこれにタグを付けたものです)。ただし、これを含むいくつかのWebページhttp://jessewarden.com/2011/01/lua-for-actionscript-developers.htmlには、保護された呼び出し(pcall)がluaエラー処理デバイスであると記載されています。

お役に立てれば。

于 2012-01-02T02:29:22.780 に答える
1

このLua例外処理システムはどうですか?LuaRAIIメカニズムを使用することもできます。

于 2012-01-02T02:50:25.997 に答える
0

一般に、例外はsignal()関数を使用してキャッチできます。しかし、luaがそのようなものをサポートするかどうかはわかりません。Cでは、それを使用します。そして、それは大きな迷惑です!(やや複雑です。)

于 2012-01-02T02:32:48.127 に答える