2010-06-10 4 views
2

Мое приложение позволяет пользователю создавать свои собственные методы косвенно, и позже мне нужно будет обратиться к этим методам. Мне интересно, есть ли способ (для проверки ошибок) проверить, существует ли метод, не пытаясь его выполнить. Если я просто попробую вызвать метод и его не существует, это приведет к сбою моего приложения.Есть ли способ «зондировать» метод общего lisp

ответ

4

Это действительно не сбой, а сигнал состояния. Если это условие не обрабатывается, будет введен отладчик. См. CLHS, Section 9.1, для получения информации о том, как использовать систему условий.

В любом случае, вы можете просто использовать fboundp для проверки.

+0

Отлично, спасибо! Есть ли способ разрешить метод, возвращаемый fboundp, чтобы определить, каким должен быть класс ожидаемого вызывающего? – Mike2012

+0

'fboundp' возвращает обобщенное логическое значение, указывающее, существует ли функция этого имени (возможно, я неверно истолковал намерение вашего вопроса). «Класс ожидаемого абонента» не имеет значения; Наверное, вы имеете в виду специалиста для этого метода. См. Ответ Райнера для этого (с помощью 'find-method'). – Svante

1

Одним из решений было бы обеспечить «ничего не делать» метод GF, рассылая на классе Т (суперкласс всех классов). Вам понадобится это для всех GF, на которых вы реализуете методы. Также было бы возможно, чтобы этот метод «ничего не делал» регистрировал некоторые данные, возможно, класс каждого аргумента, для целей аудита.

Смежные вопросы