Есть ли в LISP методы?

Узнай цену своей работы

Формулировка задачи:

Здравствуйте уважаемые участники. Разбираюсь сейчас с объектной системой лиспа, и возник такой вопрос. Правильно ли я понимаю, что несмотря на то, что в лиспе есть определение "defmethod", на самом деле в качестве этого "метода" реально просто вызывается функция, и никаких сообщений там реально нет? Могу ли я реализовать какой-то перехватчик, как например
Листинг программы
  1. test = function(argument){print(argument)}// обычная функция
  2. myObject.undefinedMethod(test(100)) // вызов несуществующего метода, в качестве аргумента подаем вызов функции, печатающей свой аргумент. В myObject определен перехватчик типа "no such method", который просто выводит строку "no such method"
  3.  
  4. // в итоге получаем
  5. >> no such method // побочный эффект функции test не выполнился
?
UPD нашел вот такую вот реализацию,
Листинг программы
  1. ; Default method-missing
  2. (defmethod method-missing (m (self t) &rest args)
  3. (format t "~s not found, no replacement method provided!~%" (cons m (cons self args)))
  4. ; Should throw an exception ...
  5. nil
  6. )
  7. ; Override global no-applicable-method handler
  8. (defmethod no-applicable-method (m &rest args)
  9. (format t "~s not found, calling method-missing!~%" (cons m args))
  10. (apply #'method-missing (cons m args))
  11. )
  12. ; Now it's possible to make limited dynamic proxies
  13. (defclass dynamic-proxy () ((obj :accessor obj :initarg :obj)))
  14. (defun make-dynamic-proxy (obj) (make-instance 'dynamic-proxy :obj obj))
  15. (defmethod set-obj ((self dynamic-proxy) new-obj) (setf (slot-value self 'obj) new-obj))
  16. (defmethod method-missing (m (self dynamic-proxy) &rest args)
  17. (apply m (cons (obj self) args))
  18. )
Но пишут, что она не совместима со множественной диспетчеризацией. Есть ли еще варианты, которые не конфликтуют с объектной системой?

Решение задачи: «Есть ли в LISP методы?»

textual
Листинг программы
  1. (arg + 1) print
  2. >>23

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4.2 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут