首页 文章

在Racket中的`suffix-out`

提问于
浏览
2

我可以使用prefix-out重命名我导出的标识符,使其具有相似的前缀 . 例如:

#lang racket
(provide (prefix-out mymod: (all-defined-out)))
(define x 5)
(define y 6)

现在 mymod:xmymod:y 应绑定到该文件内的 xy .

是否有类似的方法为模块导出的所有标识符添加后缀?所以我可以这样做:

#lang racket
(provide (suffix-out -from-mymod (all-defined-out)))
(define x 5)
(define y 6)

现在任何需要这个模块的模块都会在此模块中将 x-from-mymody-from-mymod 绑定到 xy .

1 回答

  • 3

    您可以使用filtered-out来实现此目的:

    (require (for-syntax racket/base
                         racket/provide-transform
                         syntax/parse)
             racket/provide)
    
    (define-syntax suffix-out
      (make-provide-transformer
       (lambda (stx modes)
         (syntax-parse stx
           [(_ suffix:id provide-spec)
            (expand-export
             #'(filtered-out (lambda (name)
                               (string-append name (symbol->string 'suffix)))
                             provide-spec)
             modes)]))))
    

相关问题