代码之家  ›  专栏  ›  技术社区  ›  Andrea Ciceri

如何使用Goops导出Guile Scheme中的类?

  •  1
  • Andrea Ciceri  · 技术社区  · 6 年前

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

    然而,我发现单独导出所有方法/插槽/附件非常尴尬,我希望能够导出整个类。

    0 回复  |  直到 6 年前
        1
  •  0
  •   Stefan    5 年前

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