CAD programy 4M
(*error* řetězec)
Funkce definuje chybu a zobrazí zprávu o této chybě.
Tato funkce vám umožňuje definovat chybu vrámci LISP rutiny. Chyby můžou být způsobeny programátorem nebo uživatelským vstupem. Musíte být schopni buď otestovat tyto chyby, nebo "zachytit" je, když se vyskytnou.
Zachycení chyb
Zachycení chyby se týká procesu vyhledávání chybové zprávy a pokusu poskytnout uživatelům zpětnou vazbu o tom, proč k chybě došlo a co to znamená. Funkce * error * umožňuje chytit chyby, které se vyskytly, a dává vám příležitost zvládnout je a elegantně program ukončit.
V programu můžete mít pouze jednu funkci * error *. Nicméně, protože jedna funkce může být připojena k jiné, pomocí setq funkce, můžete mít ve svém programu tolik funkcí hlídající chyby, kolik chcete. Pak k aktivování error funkce, které chcete, nastavíte funkci *error* ke své error trap rutině. Protože je zde možná jenom jedna aktivní *error* funkce, musíte být šetrní k ostatním programům nebo širším nastavením. Před změněním *error* funkce, byste měli uložit současnou funkci error trap v dočasné proměnné, abyste mohli tuto funkci znovu přiřadit, když dokončíte zpracování.
Stanovení * error * funkce
Definice funkce *error* je velmi specifické. Funkce musí být nazvána *error* (nebo ještě líp *error* se setq), a musí mít jeden argument procházející proměnnou. Tuto proměnnou můžete pojmenovat jak chcete.
PŘÍKLAD:
(defun *error* (msg) (princ (strcat "\nAn error has occurred in the program: " msg) )
Ve výše uvedeném příkladu, kdy došlo k chybě, je chybová zpráva předána do funkce * error * v proměnné msg. Funkce poté vytiskne: "Došlo k chybě v programu:" a následovalo chybové hlášení.
Zde je podrobnější příklad funkce zpracovávající chybu v reálném scénáři. Všimněte si, že nejprve uložíme aktuální funkci * error * v temperror před tím, než ji nasměrujeme na rutinní program pro zpracování chyb. Pak na konci programu myslope vrátíme funkci * error * na dříve uloženou funkci v temperror. Je důležité si uvědomit, že poslední řádek funkce myerror také vrátí funkci * error * na funkci, kterou jsme dříve uložili v temperror.
Error handler
Tato funkce vám umožňuje definovat chybu vrámci LISP rutiny. Chyby můžou být způsobeny programátorem nebo uživatelským vstupem. Musíte být schopni buď otestovat tyto chyby, nebo "zachytit" je, když se vyskytnou.
Zachycení chyb
Zachycení chyby se týká procesu vyhledávání chybové zprávy a pokusu poskytnout uživatelům zpětnou vazbu o tom, proč k chybě došlo a co to znamená. Funkce * error * umožňuje chytit chyby, které se vyskytly, a dává vám příležitost zvládnout je a elegantně program ukončit.
V programu můžete mít pouze jednu funkci * error *. Nicméně, protože jedna funkce může být připojena k jiné, pomocí setq funkce, můžete mít ve svém programu tolik funkcí hlídající chyby, kolik chcete. Pak k aktivování error funkce, které chcete, nastavíte funkci *error* ke své error trap rutině. Protože je zde možná jenom jedna aktivní *error* funkce, musíte být šetrní k ostatním programům nebo širším nastavením. Před změněním *error* funkce, byste měli uložit současnou funkci error trap v dočasné proměnné, abyste mohli tuto funkci znovu přiřadit, když dokončíte zpracování.
Stanovení * error * funkce
Definice funkce *error* je velmi specifické. Funkce musí být nazvána *error* (nebo ještě líp *error* se setq), a musí mít jeden argument procházející proměnnou. Tuto proměnnou můžete pojmenovat jak chcete.
PŘÍKLAD:
(defun *error* (msg) (princ (strcat "\nAn error has occurred in the program: " msg) )
Ve výše uvedeném příkladu, kdy došlo k chybě, je chybová zpráva předána do funkce * error * v proměnné msg. Funkce poté vytiskne: "Došlo k chybě v programu:" a následovalo chybové hlášení.
Zde je podrobnější příklad funkce zpracovávající chybu v reálném scénáři. Všimněte si, že nejprve uložíme aktuální funkci * error * v temperror před tím, než ji nasměrujeme na rutinní program pro zpracování chyb. Pak na konci programu myslope vrátíme funkci * error * na dříve uloženou funkci v temperror. Je důležité si uvědomit, že poslední řádek funkce myerror také vrátí funkci * error * na funkci, kterou jsme dříve uložili v temperror.
Kód | Comments |
---|---|
(defun c:myslope ( ) | Defining the program "myslope". |
(setq temperror *error*) | Saving current error function to variable. |
(setq *error* myerror) | Setting *error* to the error handling routine. |
(setq p1 (getpoint "Select 1st point: ")) | Setting p1 to the user specified point. |
(setq p2 (getpoint p1 "Select 2nd point: ")) | Setting p2 to the user specified point. |
(setq slope (/ (-(cadr p2) (cadr p1)) | Setting slope to the slope formula using p1 and p2. |
(-(car p2) (car p1)))) | |
(princ (strcat "Slope equals " | Printing what slope equals to two decimal places onto the screen. |
(rtos slope 2 2))) | |
(setq *error* temperror) | Returning the error function to the variable. |
) |
Error handler
Kód | Comments |
---|---|
(defun myerror (msg) | Define the error handler "myerror". |
(if (= msg "divide by zero") | If the passing variable msg is the same as "divide by zero", |
(prompt "\n The line is vertical.") | then show this prompt, |
(prompt (strcat "\n" msg) | else show this prompt |
) | |
(setq *error* temperror) | Return the error function to the variable. |
) |