首页 > 解决方案 > 如何使用 Goops 在 Guile Scheme 中导出类?

问题描述

在我的项目中,我在不同的模块中定义了几个 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

但是我发现必须单独导出所有方法/插槽/附件真的很尴尬,我希望能够导出整个类。

标签: oopmoduleschemeguile

解决方案


每个创建的符号值绑定都需要导出,所以是的,导出所有创建的访问器有点尴尬。但是制作自动导出访问器的自定义宏相对容易。然后在您的示例中,您需要重新导出 a 中定义的所有符号才能从 b 中获取它。但是,我只会从 a 和 b 导入。通过在 b 中执行的宏重新导出 a 中的所有导出符号也非常简单。


推荐阅读