История изменений
Исправление theNamelessOne, (текущая версия) :
(setf (slot-value c 'radius) 7)
А почему это вообще должно работать? make-instance
принимает название класса и список инициализации аргументов, а не произвольные выражения. Почему вообще (setf (slot value c ...))
должен работать, если сам c
не объявлен? (Напоминаю, параметр c
метода area
является локальным для самого метода, т.е. извне он не существует.)
Если ты хочешь проинициализировать слот при создании инстанса, то это делается примерно так:
(defclass circle ()
((radius
:initarg :radius))
(defmethod area ((c circle))
(* pi (expt (slot-value c 'radius) 2)))
(area (make-instance 'circle :radius 7))
(Код не проверял, так что не уверен, что он работает; у меня не стоит интепретатор CL, я вообще не пишу на CL, я просто по нему одну книжку 10 лет назад прочитал.)
Выглядит так, как будто ты не совсем понимаешь, что ты делаешь (причём как в плане языка, так и в плане CLOS). Почитай какую-нибудь книгу по языку, даже тот же PCL (там есть и главы про CLOS).
Исходная версия theNamelessOne, :
(setf (slot-value c 'radius) 7)
А почему это вообще должно работать? make-instance
принимает название класса и список инициализации аргументов, а не произвольные выражения. Почему вообще (setf (slot value c ...))
должен работать, если сам c
не объявлен? (Напоминаю, параметр c
метода area
является локальным для самого метода, т.е. извне он не существует.)
Если ты хочешь проинициализировать слот при создании инстанса, то это делается примерно так:
(defclass circle ()
((radius
:initarg :radius))
(defmethod area ((c circle))
(* pi (expt (slot-value c 'radius) 2)))
(area (make-instance 'circle :radius 7))
(Код не проверял, так что не уверен, что он работает; я вообще не пишу на CL, я просто по нему одну книжку 10 лет назад прочитал.)
Выглядит так, как будто ты не совсем понимаешь, что ты делаешь (причём как в плане языка, так и в плане CLOS). Почитай какую-нибудь книгу по языку, даже тот же PCL (там есть и главы про CLOS).