| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны | Справка по форуму | Файлообменник | |
|
Поиск в этой теме |
|
||||
Ну у меня то как раз вариант где требовалось остановить выполнение кода после (*error* nil). Выходит мне нужно вместо (*error* nil) использовать (exit), которая уже в свою очередь вызовет *error*...
__________________
Блог |
||||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,787
|
А разве настолько необходимо локальное переопределение *error*?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Ну в общем нет. Но так уж у меня пока все написано
__________________
Блог |
||||
|
||||
Регистрация: 20.03.2008
Сообщений: 2,653
|
Offtop: Привет, Red Nova
Даже и не знаю, с чем тебя поздравлять: с золотом или с бронзой? Однако очень мне жаль, что наши наши не схлестнулись с вашими нашими Насчёт твоего вопроса - то чувство, когда знаешь откуда ноги растут... Цитата:
Мысль была такова, что после выполнения всех действий программы нам надо восстановить состояние среды: вернуть все системные переменные, удалить временные и вспомогательные примитивы, перерисовать (redraw) и т.д. То же самое (как правило) надо сделать в случае вылета программы с ошибкой, когда автоматически вызывается локально переопределенная функция *error*. И в ней по задуманному алголитму содержится (как правило) тот же сценарий, что и после завершения программы. Поэтому, дабы не дублировать куски кода, можно вместо этого в конце функции вызвать (*error* nil). Таким образом, вызвав посреди кода (*error* nil), ты просто вернешь состояние среды в первоначальное, не дождавшись завершения работы программы. Изначально я эту мысль извлек среди прочих из урока gomer'а. Она мне очень понравилась и прижилась. Помню, что делился ею с тобой в какой-то теме, вроде бы даже в этой, но пролистал поиск на несколько десятков страниц - и не нашел. А ты, видимо, чуть подзабыв, интерпретировал ее так, как тебе было удобно в какой-то момент Цитата:
Обеспечить выход (если не говорить о вылете с ошибкой), разумеется, можно через (exit), который спровоцирует вызов *error*. Но давно когда-то читал тут на форуме, что такого выхода лучше избегать. Причин не помню, вроде как они и озвучены не были. Предполагаю, что по мнению автора этой идеи было неправильным искусственно провоцировать ошибку с записью в командной строке "Ошибка завершить/выйти/прервать" (или что-то типа того). И вышло так, что я приучил себя выходить из программы при помощи соответствующего построения алгоритма. Например, использовать cond, и в случае, если не выполняется ни одно из условий, то собственно, ничего и не делать и завершать программу по-тихому. И параллельно приучил себя после урока gomer'a просто вызвать (*error* nil) после завершения cond. То есть приучился не вызывать искусственно завершение программы, так как это приводит к ошибке, но при этом искусственно вызывать программу, которая должна сработать при ошибке Вот такие вот пироги. Да. |
|||
|
||||
skkkk,
Спасибо за развернутый ответ. Познавательно. Цитата:
Offtop: Цитата:
__________________
Блог |
||||
|
||||
Регистрация: 17.03.2018
Санкт-Петербург
Сообщений: 5
|
Всем привет!
Пишу программу на AUTOLISP с диалоговым окном DCL. Обнаружил некие ограничения элемента диалога list_box с установленным атрибутом multiple_select=true. Возвращаемое значение функции get_tile ограничено длиной строки приблизительно 2017 символов. Если количество выбранных элементов списка листбокса формирует строку длиннее 2017 символов (а это максимум 532 первых элементов списка листбокса) get_tile возвращает nil. Значение переменной действия $value ограничено 256 элементами списка листбокса. При указании большего числа элементов в диалоге значение переменной всё равно 256 элементов. Сталкивался ли кто-либо с подобным ограничением? Существуют ли другие способы получить корректное значение из list_box окна DCL при указании более 532 элементов? Версия AutoCAD 2012. |
|||
|
||||
Регистрация: 10.08.2013
Сообщений: 11,004
|
может, попробовать написать сам диалог не на DCL - например, в виде сборки dll с атрибутом LispFunction
|
|||
|
||||
Регистрация: 17.03.2018
Санкт-Петербург
Сообщений: 5
|
К сожалению ООП, Active X и (.NET) для меня пока слишком высокие материи...
Кроме того, если я верно пониманаю, применение dll подразумевает установку программы и наличие прав администратора? Их у меня нет, - политика компании и всё такое. Программа уже написана. Ошибка вылезла на стадии тестирования. Пока сделал заплатку с выводом сообщения в errtile о слишком большом выборе. Ожидаемое количество элементов списка вышеуказанного листбокса - до 1000 элементов. За две операции выбора задачу по обработке списка можно решить. Однако, удивляет что подобная особенность поведения функции get_tile и переменной $value не описана у Полещука. Также не обнаружил упоминания об этих особенностях на ресурсах Autodesk и у Ли Мака. Вот и закралось подозрение - может проблеммы и нет вовсе... Может чего не то с настройками автокада или проблема как то решается. |
|||
|
||||
Регистрация: 10.08.2013
Сообщений: 11,004
|
не требует - просто надо будет положить dll в "доверенную" папку (чтобы не выскакивали предупреждения) и загружать перед вызовом программы (или сделать автозагрузку). Их не надо регистрировать в операционной системе. Но может подскажут, как обойти этот ограничение в DCL, конечно.
|
|||
|
||||
Регистрация: 17.03.2018
Санкт-Петербург
Сообщений: 5
|
Благодарю за разъяснение!..
P.S.: Только сегодня зарегистрировался, наблюдаю какие-то то проблемы с форумом: сообщения не публикуются часами, со стационарного компьютера вообще на страницу форума попасть не могу... Пишу с мобильного телефона... |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,787
|
М-да, код вызывает оторопь
В функции c:p2, похоже, идет генерация ошибки до того, как вызываются функции восстановления значения переменных. Проходи пошагово, выясняй, в каком именно месте геренируется ошибка.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,787
|
Ну тогда советую обратиться к автору кода.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
|
||||
|
||||
Регистрация: 24.09.2015
Сообщений: 36
|
Дело в том что я не помню автора, я работал с 4-5ю авторами по разным вопросам) Осталось высчитать в блокноте 153-ю страницу.
Я туда строку вставил? https://c2n.me/3SRXgsC |
|||
|
||||
её не нужно вставлять, её нужно закомментировать, поставить в начале ";"
|
||||
|
||||
Регистрация: 12.01.2015
Сообщений: 261
|
Цитата:
Функцию Код:
Последний раз редактировалось Кулик Алексей aka kpblc, 26.03.2018 в 08:53. |
|||
|
Опции темы | Поиск в этой теме |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
LISP. Вставка в таблицу поля, соотвествующего площади примитива | Profan | Готовые программы | 272 | 06.06.2021 23:12 |
Сейсмозащита и сейсмоизоляция существующих, построенных зд. | IANationalInformAgentstvo | Прочее. Архитектура и строительство | 216 | 20.01.2015 16:51 |
Мониторы LCD CRT | Разное | 94 | 17.06.2008 10:51 | |
ЮМОР 2006 =) | Perezz!! | Разное | 1122 | 04.01.2007 00:46 |