‮Сдвиг по фазе (kincajou) wrote,
‮Сдвиг по фазе
kincajou

Embeddable CL(3)

Мне повезло.
Я нашёл глюк в этой штуке. Реализация no-applicable-method не соответствует стандарту и работает криво. Вот что выяснилось:
(defun dummy(a &optional l)
 (format t "Dummy ~A ~A~%" a l) ; ЗАТЫЧКА для ECL
)

;(defmethod no-applicable-method ((mthd (eql #'draw)) &rest args) ;; CLISP format, ANSI compliant
(defmethod no-applicable-method ((mthd (eql #'draw)) args ) ;; ECL format, not ANSI compliant
 "Here we will handle an error if we try to draw something that we can't draw"
 (format t "Ooops! No method to ~w an ~w.~%" mthd args)
 #'dummy ; ECL-specific workaround
)


CLISP преспокойнейше работает, если возвращаемый объект никому не передаётся, а вот ECL упрямо хочет трактовать возвращаемое как функцию и вызывает её. Из-за чего отсутствие dummy всё равно вызывает падение - то есть, например, если возвращать NIL, то ECL ругается на то, что "функция NIL не определена" (ну ещё бы!)

Собсно, я хотел эту штуку применить для того, чтобы программа ругалась бы на неопределённый метод, но продолжала бы выполнение. Пусть и без этого неопределённого метода. Однако же, обход сбоя сбоит сам.

Блин.

С другой стороны, если все вызываемые методы определены (т.е. если программист не шизофреник), то no-applicable-method как бы и не нужен...

Оставил багрепорт. Пусть будет таким мой посильный вклад!
Tags: приключения Электроника
Subscribe
  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 0 comments