Как экспортировать классы в Guile Scheme с помощью Goops? - PullRequest
0 голосов
/ 07 февраля 2019

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

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

;;;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 Ответ

0 голосов
/ 02 марта 2019

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

...