在Racket中的`suffix-out`

时间:2016-08-28 22:43:47

标签: module racket

我可以使用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 个答案:

答案 0 :(得分: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)]))))