我的
define
文件中有一堆 utils.rkt
。 其中一些是辅助函数,我真的不想provide
它们。 我浏览了文档(https://docs.racket-lang.org/reference/require.html),看起来 provide
和 #%provide
需要我想要排除的所有表单的明确列表。 我已经在每个助手的名称前添加了下划线,因此它们最终的名称如 _foo
、_bar
和 _baz
。
将
provide
映射到 (filter not-helper-p (module->exports my-module))
似乎是一个不错的尝试,但 racket
抱怨 provide: not at module level
。 我还详细介绍了命名空间、模块名称和加载以及提供。
(define (foo x)
(_foo x 0))
(define (_foo x y)
(+ x y))
在这个示例中,我想要一种简单的方法来仅提供绑定到没有下划线前缀的符号的内容。 所以我应该只提供
foo
。 在实践中,我有很多这样的东西,并且通过名称明确地排除它们会很痛苦。
我对
racket
比较陌生:做这种事情有更常见的模式吗?
contract-out
)是可行的方法,但我最近注意到文档中用于进行此类过滤的matching-identifiers-out
和filtered-out
:
#lang racket/base
(require racket/provide)
(provide
;; Filter out symbols without a leading _
(matching-identifiers-out #rx"^[^_]" (all-defined-out)))
(define foo 1) ; exported
(define bar 2) ; exported
(define _foo 3) ; not exported