krispy 的个人资料Kristian's Space日志列表留言簿更多 ![]() | 帮助 |
|
|
10月9日 *error* handlingSomething I have been playing around with lately in the LISP world is error handling. Previously I would create a separate error function and set values for olderr and *error* within the main function. I have since discovered the joys of declaring the *error* function local and nesting it within the main function:
(defun MAIN (/ *error* xCmdEcho)
(setq xCmdEcho (getvar "CMDECHO")) (defun *error* (msg) (if (or (= msg "Function cancelled") (= msg "quit / exit abort") ) (princ) (princ (strcat "\nError: " msg)) );end if (setvar "CMDECHO" xCmdEcho) );end error function ;main function contents
(exit nil)
);end defun MAIN
The advantage of this, besides having the code encapsulated and local so it is destroyed at the end of the main function, is that not only can you use the *error* function to reset system variables in case of an error, you can also explicitly call the function at the end of the main function like so: (exit nil).
This ability to call (exit nil) can be used anywhere within the main function and can be used to terminate execution if invalid input is detected from the user, rather than having multiple nested if's and progn's.
The example above simply exits quietly (and resets CMDECHO) if it is called with (exit nil) or if the user hits [ESC], or displays the error message if something unexpected happened. 引用通告此日志的引用通告 URL 是: http://kristianparsons.spaces.live.com/blog/cns!E4BE66B9C282058D!118.trak 引用此项的网络日志
|
|
|