Как экспортировать классы в Guile Scheme с помощью Goops?

В моем проекте у меня есть несколько классов goops, определенных в разных модулях (следовательно, в разных файлах). Я не могу понять, как правильно экспортировать класс (и его аксессуары) из модуля.

Это то, что я пытался. Я также пытался каждый раз экспортировать "шлиц", как мне было интересно в комментариях, но это не работает.

;;;module-a.scm
(define-module (module-a)
  #:use-module (oop goops)
  #:export (<class-a>)) ;Have I to export "slot-of-a" too?

(define-class <class-a> ()
  (slot-of-a #:accessor slot-of-a))


;;;module-b.scm
(define-module (module-b)
  #:use-module (oop goops)
  #:use-module (module-a)
  #:export (<class-b>)) ;Have I to export "slot-of-a" here too?

(define-class <class-b> (<class-a>))


;;;main.scm
(use-modules (oop goops) (module-b))
(define obj (make <class-b>))
(set! (slot-of-a obj) 'foo) ;This causes an error

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

1 ответ

Каждая созданная привязка значения символа должна быть экспортирована, так что да, будет немного неудобно экспортировать все созданные средства доступа. Но создавать макросы, которые автоматически экспортируют средства доступа, относительно легко. Затем в вашем примере вам нужно реэкспортировать все символы, определенные в a, чтобы получить его от b. Однако я бы просто импортировал из a и b. Также довольно просто реэкспортировать все экспортированные символы в a через макрос, который выполняется в b.

Другие вопросы по тегам