oop - 如何使用 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
但是我发现必须单独导出所有方法/插槽/附件真的很尴尬,我希望能够导出整个类。
解决方案
每个创建的符号值绑定都需要导出,所以是的,导出所有创建的访问器有点尴尬。但是制作自动导出访问器的自定义宏相对容易。然后在您的示例中,您需要重新导出 a 中定义的所有符号才能从 b 中获取它。但是,我只会从 a 和 b 导入。通过在 b 中执行的宏重新导出 a 中的所有导出符号也非常简单。
推荐阅读
- jax-rs - 使用 RESTeasy 动态获取博客内容
- r - 如何创建带有胡须的箱线图?
- c++ - QML 中的进度条实现以显示 C++ 中循环的进度
- vba - Access如何释放ODBC
- python-3.x - 多次检查但仍然 SyntaxError:扫描字符串文字时 EOL
- python - 如何在python中捕获一个进程?
- xslt-2.0 - XSLT - Saxon 格式错误的 URL 未知协议:xmldb
- c# - 在 asp.net core 中设置 HTTPGet 调用的 MaxURLLength
- javascript - JavaScript 中的自动换行检测
- bash - 检查文件被访问的次数