|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
![]() |
#1 | |
Проверка функции на локальность переменных
Проектировщик ВК. LISP-любитель.
Москва
Регистрация: 15.12.2003
Сообщений: 1,202
|
||
Просмотров: 3240
|
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404
|
atoms-family запусти перед вызовом функции, сохрани значения в список; потом после вызова функции. И сравнивай списки.
Например: Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Инженер-строитель Регистрация: 15.08.2007
Киров
Сообщений: 2,204
|
Там было "в данном случае с". Задача более общая. Переменных могут быть десятки, строк кода сотни.
Кулик Алексей aka kpblc, в твоём случае необходимо условие: _dwgru-check-variables будет давать нужный результат только в том случае, если функция f ни разу до этого не запускалась. Это не очень удобно. И ещё: (eval (read func-call)) собственно запускает подопытную функцию в работу, а там может быть что угодно. Вообще универсального решения я пока не вижу, кроме как непосредственно анализировать лисп-файл с кодом на предмет соответствия списка локальных переманных и всех setq в нём. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404
|
Для сотен строк кода организовывай анонимные и / или локальные функции. Короче, разбивай код на логические куски. И писать проще, и отладку вести
![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Инженер-строитель Регистрация: 15.08.2007
Киров
Сообщений: 2,204
|
Спасибо, Кэп.
Давай по-другому сформулирую вопрос. Допустим вот уже есть код из немеряного количества строк (ну допустим тот же известный на этом форуме CTS от VVA). Как его можно проверить на наличие глобальных переменных за минимальное количество времени? |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404
|
Если без муторного анализа кода - то через atoms-family. Лично я другого варианта не вижу
![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Проектировщик ВК. LISP-любитель. Регистрация: 15.12.2003
Москва
Сообщений: 1,202
![]() |
Вопрос был именно общий, т.е. необходима функция test, аргументом которой будет выполняемое выражение, например, функция F
(test '(F a b)) => должно вернуть 'C, при этом F выполняется. вот что я хочу. Нужно это стало в связи с тем, что какие-то из запускаемых функций явно мусорят необьявленными переменными. А какие это функции - я не знаю, а этих функций очень много, и переменных в них много. Но функции у меня запускаются все через обертку, на подобии test, куда включены обработка ошибок, UndoMark, и прочие прелести. Вот туда то я и хотел вставить проверку на переменные, чтобы отловить подобные ошибки в написании функций. Идея понятна, спасибо. Попробую. |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Цитата:
В окне Build Output будет выведена полная статистика по всем функциям - имена функций, количество аргументов и глобальные переменные. Наподобие: Код:
А вот если что-то забыли описать, вид может быть: Код:
Этим надо пользоваться постоянно! Как руки мыть... Аналогичная статистика выводится при Build Project - только будут выведены данные из всех файлов проекта. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404
|
ShaggyDoc, позволю себе дополнить: для получения подобного результата в Tools -> Environment Options -> Global Options -> Diagnostics надо отметить как минимум Report statistics during syntax checking. Иначе для кода
Код:
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Инженер-строитель Регистрация: 15.08.2007
Киров
Сообщений: 2,204
|
ShaggyDoc, Кулик Алексей aka kpblc
Вот ведь как. Удивительно, но впервые слышу о таком. Тогда я думаю вопрос исчерпан. Offtop: PS Кулик Алексей aka kpblc, так бы и сказал сразу. А то лисп сразу наваял, совсем запутал вконец. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404
|
Makswell, не поверишь, но я этой функцией практически не пользуюсь. В случае локальных функций с параметрами (лично у меня) иногда начинается кавардак в отчете, хрен разберешься. Закономерность как-то не уловил, но испуга до сих пор хватает.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
![]() |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Предложение: Готовые функции | Apelsinov | Библиотека функций | 170 | 27.06.2010 23:51 |
Функции AutoLISP из ... DLL! | Supermax | LISP | 21 | 27.06.2010 14:18 |
Как Извлечь из строки числа | Kostinok | Программирование | 7 | 12.08.2008 08:00 |
Как связать две функции | Holon | Программирование | 11 | 30.07.2007 13:32 |
Странности функции rtos | FWA | Программирование | 2 | 16.02.2005 11:37 |