を扱う成功事例とエラー(私が参照として別の質問を引用したい:How do I elegantly check many conditions in Erlang?)アーラン:トランザクションとして
「エラー処理から分離成功事例コード」の一般的な形式があるように思わ:
try
ok = do_x(),
...
ok = do_y()
catch
error:{badmatch, x_failure} -> do_something1();
...
error:{badmatch, y_failure} -> do_something2();
try節の関数が、ファイルの書き込み、ネットワークパケットの送信、データベースへの行の書き込みなどの副作用を伴う何らかの処理を行う場合、このパターンを使用する方法はありますか? catch節に「ロールバック」用の汎用パターンがありますか?例:
try
%How to make this whole block a transaction?
ok = step_1_write_file(),
ok = step_2_write_database(),
ok = step_3_send_packet(),
...
catch
error:{badmatch, database_failure} -> clean_up_step_1() %delete file?
error:{badmatch, sendpacket_failure} -> clean_up_step_1_and_2() %??
実行する必要があるクリーンアップが失敗したtry
ブロックのステップに依存しているところエラーハンドリングは、有償取得するように思えます。私は個人的に渡すことで、そのようなアルゴリズムをプログラミングすることを学んだ
成功_typing_はここでは関連していないようです。 –
@AlexeyRomanov question title edited – Tommy