可能な場合、プログラムはコントロールを *error* に渡すことができるようにする代わりに、エラーをトラップしてエラー処理を試みることができます。
vl-catch-all-apply 関数は、任意の関数を呼び出して関数から値を返して発生する可能性のあるエラーをトラップするように設計されています。この関数には 2 つの引数が必要です。
vl-catch-all-apply の重要な点は、エラーを検出してプログラムの実行を継続できるようにする機能です。次の例は、vl-catch-all-apply を使用して 2 つの数値を除算します。
(setq catchit (vl-catch-all-apply '/ '(50 5))) 10
この例の結果は、apply を使用して除算を実行したり、指定した数値を単に / を使用して除算したのと同じ結果になります。
次の例は、vl-catch-all-apply を使用して 2 つの数値を除算しますが、一方の数値が 0(ゼロ)です。
(setq catchit (vl-catch-all-apply '/ '(5 0))) #<%catch-all-apply-error%>
この例の結果は、vl-catch-all-error-message を使用してトラップできる VL-CATCH-ALL-APPLY-ERROR オブジェクトが返されます。type 関数を使用して、vl-catch-all-error-message を呼び出す前にエラー オブジェクトで作業することができます。
次の例は、エラーオブジェクトを確認し、エラー メッセージを返します。
(if (vl-catch-all-error-p catchit) (vl-catch-all-error-message catchit) ) "divide by zero"