|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
![]() |
#1 | |
Неприятные особенности использования запуска команд макросами кнопок
Регистрация: 22.01.2010
Сообщений: 311
|
||
Просмотров: 7993
|
|
||||
Регистрация: 22.01.2010
Сообщений: 311
|
Не думаю, что это хорошая идея.
Описанный случай из практики. Заказчик попросил некоторую функцию. Я ему её предоставил. Примерно через месяц потребовалась ещё одна, похожая на первую, но несколько видоизменённая. Проще было её реализовать на базе первой. Разумеется, все имена внутренних функций остались прежними, только с другим наполнением. А если прошел год, два, а не месяц ? Всё ведь не упомнишь... У любого программиста есть сотни функций, кочующих из программы в программу иногда без изменений, иногда с незначительными правками. Предлагаете всем им давать уникальные имена ? |
|||
![]() |
|
||||
строю, ломаю Регистрация: 03.04.2008
Украина
Сообщений: 5,515
|
Цитата:
вот поэтому |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Цитата:
Код:
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
Регистрация: 22.01.2010
Сообщений: 311
|
VVA и Li6-D,
Локальные функции это, конечно, хорошо. Но как быть с уже написанной уймой программ без этих самых локальных функций ? Повторю вопрос: есть ли подводные камни у способа вызова команды без проверки её предварительной загрузки, т.е. ^C^C(load "C:\\test1.lsp");test1; ? |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406
|
Теоретически есть - через atom-family (кажется, так) проверяешь существующие имена функций и переменных. Но намного проще и быстрее писать нормальный код, с использованием нормальных локальных переменных и функций.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 22.01.2010
Сообщений: 311
|
Конечно так лучше, но ведь на момент написания твой собственный код кажется тебе самым лучшим, а то, что он не такой уж и нормальный, выясняется уже потом)))
|
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406
|
Цитата:
![]() ![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 22.01.2010
Сообщений: 311
|
Цитата:
обычный продвинутый инженер-проектировщик обращается к кому-нибудь с просьбой написать программу, получает её, самостоятельно вешает её на кнопку и наслаждается жизнью. Через некоторое время обращается к другому программисту с очередным заданием, проделывает то же самое и наслаждается до тех пор, пока не нарвётся на описанную выше хрень. А вероятность того, что в двух программах разных авторов окажутся НЕ локальные функции с одинаковыми именами, довольно высока. Например, вывод в Excel (toexcel), создания диалога "на лету" (make-dialog), перевода углов в радианы (dtor) и т.п. и т.п. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406
|
Цитата:
_kpblc-datas-export-to-excel fun_make-dlg, и ее в локальные _kpblc-conv-degrees-to-radians или _kpblc-angle-convert. Попробуй найти еще подобные имена. Еще раз говорю - внешняя команда, которую и вызывает пользователь, может иметь любое имя. Все остальное - потроха, про само существование которых пользователь зать не должен.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 22.01.2010
Сообщений: 311
|
Алексей,
а причем тут твои функции ? Не все же ими пользуются. Рискну даже предположить, что не все заглядывают на этот форум, хотя это и трудно себе представить)))). Я говорю про двух разных программистов, программы которых окажутся у одного пользователя, который действительно не должен ничего знать про внутренности. И вот в этих двух программах вполне могут оказаться одноименные функции. И для этого самого пользователя вызов команды ^C^C(load "C:\\test1.lsp");test1; - единственный надежный выход из положения. |
|||
![]() |
|
||||
Регистрация: 03.05.2009
Сообщений: 112
|
Если после (load "C:\\test1.lsp") ввести (load "C:\\test2.lsp"), то все глобальные переменные (включая функции), определенные в файле C:\test1.lsp будут заменены новыми из C:\test2.lsp при совпадении имен.
Тут ничего не поделаешь. Культурный программист постарается не использовать глобальные переменные-функции или даст им уникальные имена Например, Алексей добавляет префикс _kpblc. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406
|
swkx, а я говорил про принципы именования функций и ни про что иное. Формируешь свой принцип и строго ему следуешь. Вот и все...
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 11.10.2010
Сообщений: 979
|
А кто-то мешает прямо сейчас переделать пару кодов?
![]()
__________________
(/= RegDate StartReadDate) |
|||
![]() |
|
||||
Помогаю, кому делать нечего. Регистрация: 27.03.2009
Русская деревня
Сообщений: 394
|
swhx, Загружаю Lisp-ы именно так, как ты предлагаешь (без IF) начиная где-то с 1997года. Никаких проблем не возникало, хотя теоретически их можно придумать. До 1997 года работал на машине АТ286 с "куриными мозгами" (хотя тогда это было круто). Там даже приходилось делать оверлеи и подгружать их. А современная машина несколько десятков килобайт lisp-a проглатывает не жуя. При этом не чихает и не кашляет. ИМХО.
PS: С точки зрения профессионала это конечно тупо, но я Lisp-любитель, кустарь-одиночка, и все себе заранее прощаю. Последний раз редактировалось E-degtyarev, 06.06.2011 в 09:05. |
|||
![]() |
|
||||
Регистрация: 22.01.2010
Сообщений: 311
|
Сейчас уже никто и ничто не мешает. А описание проблемы я увидел в почте на мобильном, причины и способ решения стали понятны сразу, но Автокада под руками не было, вот и пришлось посоветовать самый простой выход.
E-degtyarev, я это и хотел услышать )) Кстати, мне тоже приходилось использовать собственные лиспы на 286-м компе и 9-м автокаде. Выручала только функция (gc). |
|||
![]() |
|
||||
строю, ломаю Регистрация: 03.04.2008
Украина
Сообщений: 5,515
|
swkx, у вас все лиспы находятся в корне диска с:? а если я захочу установить на другой диск? На каком-нибудь 10 уровне вглубь... как будет меню выглядеть?
как-то сделал функцию загрузки и запуска команды: Код:
такой метод просто делает код меню вдвое меньше... (хм... еще кнопки можно по диску разбросать и совсем полный абзац будет...) Для себя уяснил две вещи... в меню только команды и опции (это позволит набирать с команду клавиатуры сразу после загрузки меню), все иконки в библиотеке (так их не надо искать)... |
|||
![]() |
![]() |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
В русской версии AutoCAD 2010 SP1 32-bit файл Acad.PGP содержит ошибки. | hwd | Баги и пожелания в Autodesk | 21 | 21.04.2010 20:27 |
Программное управление макросами кнопок | Supermax | Программирование | 2 | 24.12.2007 14:07 |