GNU Emacs 32.0.50 (9008bf64c3) のマニュアルを PLaMo 翻訳で機械翻訳したものです。誤訳を含むことがあります。原文: https://www.gnu.org/software/emacs/manual/html_node/eintr/condition_002dcase.html ・ emacs-doc.conao3.com

8.2.1 condition-case

前述の通り(エラーメッセージの生成を参照)、Emacs Lispインタプリタが式の評価に問題を抱えた場合、ヘルプが表示されます。専門用語では、これを「エラーをシグナルする」と呼びます。通常、コンピュータはプログラムを停止し、メッセージを表示します。

しかし、複雑な処理を行うプログラムもあります。そうしたプログラムは、単にエラーで停止すべきではありません。kill-region関数において最も起こりやすいエラーは、読み取り専用で削除できないテキストを削除しようとすることです。そのため、kill-region関数にはこの状況に対処するためのコードが含まれています。kill-region関数の本体を構成するこのコードは、condition-case特殊形式の中に記述されています。

condition-caseのテンプレートは次のようになっています。

(condition-case
  var
  bodyform
  error-handler...)

第2引数の bodyform は単純です。特殊形式 condition-case は、Lispインタプリタに bodyform 内のコードを評価させます。エラーが発生しなければ、この特殊形式はコードの値を返し、副作用があればそれを発生させます。

要するに、condition-case 式の bodyform の部分が、すべてが正常に動作した際に何が起こるかを決定します。

ただし、エラーが発生した場合、エラー信号を生成する関数は、その他の処理の一環として、1つ以上のエラー条件名を定義します。

エラーハンドラは condition-case の第3引数です。エラーハンドラは、condition-name と body の2つの部分で構成されています。エラーハンドラの condition-name 部分がエラーによって生成された条件名と一致する場合、エラーハンドラの body 部分が実行されます。

ご想像の通り、エラーハンドラの condition-name 部分は、単一の条件名または条件名のリストのいずれかになります。

また、完全な condition-case 式には、複数のエラーハンドラを含めることができます。エラーが発生すると、最初に適用可能なハンドラが実行されます。

最後に、condition-case 式の第1引数である var 引数は、エラーに関する情報を含む変数にバインドされることがあります。ただし、kill-region の場合のようにその引数が nil である場合は、その情報は破棄されます。

簡単に言うと、kill-region関数において、コードcondition-caseは次のように動作します。

If no errors, run only this code
    but, if errors, run this other code.