|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
![]() |
#1 | |
Quit vs Exit
Регистрация: 12.01.2006
Сообщений: 114
|
||
Просмотров: 5250
|
|
||||
Регистрация: 25.12.2005
Москва
Сообщений: 13,627
|
Если посмотреть сообщения командной строки при выполнении функций quit и exit, то можно заметить:
;ошибка: завершить / выйти прервать- на русском языке и ;error: quit / exit abort - на английском языке. Отсюда можно сделать вывод, что quit - это завершить, exit - это выйти, а abort - это прервать. Но функции abort вроде бы нет... |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,408
|
Я в последнее время, если прописан обработчик ошибок, предпочитаю вызывать (vl-exit-with-error). не знаю, насколько это правильно, но пока вроде как с ума не сходило
![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 12.01.2006
Сообщений: 114
|
Цитата:
Я понимаю, что если на этом форуме поискать хорошенько, то тут таких примеров достаточно, но если не затруднит... А то я, со своими познаниями в лиспе, не сразу и отличу :-) |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,408
|
Ок. Попробую рассказать
![]() В общем-то суть проста. Ошибки выполнения обрабатываются встроенной функцией *error*. Поскольку это лисп, ее можно достаточно безболезненно переопределить. Суть такова: в объявлении функции Код:
Код:
![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 12.01.2006
Сообщений: 114
|
Т.е. суть этого обработчика в возможности откатить все действия, которые можно прописать вместо строки ";; Делаем чего хотим "?
А нажатие пользователем клавиши ESC относится к разряду ошибок, или оно просто безоговорочно прерывает выполнение функции? |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,408
|
Ну как бы это сказать... В общем, к примеру. В процессе работы функции выполняются временные построения. Произошла ошибка. Временные примитивы надо посносить. Прописываем в обработчике. Там же, например, можно прописать восстановление состояния слоев, системных переменных, какие-либо дополнительные действия...
Нажатие Esc расценивается как вход в обработчик. Пример почти универсального обработчика лежит на http://www.arcada.com.ua/forum/viewtopic.php?t=445 - если интеерсно
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
kpblc почему-то умолчал или забыл?
![]() http://www.arcada.com.ua/forum/viewt...140818a1c968f1 Там определен стандартный обработчик ошибок kpblc-error ВАЖНО! В ф-цию обработки ошибок всегда передается ОДИН параметр (msg) - сообщение об ошибке. Пишется свой обработчик ошибок, например Код:
Тогда заготовка твоей любой ф-ции будет выглядеть так Код:
|
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Дополню kpblc №9. Ели произошла ошибка, то стандартный обработчик ошибок выводит сообщение об ошибке, обработчик tramp-error - выводит сообщение об ошибке, вызывает _UNDO _END, чтобы все, что было построено со времени вызова ф-ции можно было отменить одним нажатием кнопки. Если нужно сносить какие -либо врыменные примитивы, то их нужно накапливать в глобальной переменной и обрабатывать в tramp-error
Вот например как у нас Код:
|
|||
![]() |
|
||||
Проектировщик ВК. LISP-любитель. Регистрация: 15.12.2003
Москва
Сообщений: 1,202
![]() |
как делаю я:
Допустим есть ваша Функция myfunc. Так вот чтоб в каждую новую функцию не вставлять этот обработчик ошибок, пишем функцию стандартного запуска my-com в которой через defun-q определяем *error*. Теперь можно запускать myfunc так: (my-com '(myfunc арг_1...арг_n)). соответственно в my-com можно напихать еще целый ряд полезных вещей типа undo, обработки сис переменных, отрисованых или подсвеченых объектов и т.п. а в случае надобности в myfunc можно и переопределить *error* , добавив нужные функции к списку тела *error*.
__________________
apel.fas |
|||
![]() |