Racket 如何要求在球拍宏中使用?
我目前将单元测试放在我正在处理的文件的底部,如下所示:Racket 如何要求在球拍宏中使用?,racket,metaprogramming,Racket,Metaprogramming,我目前将单元测试放在我正在处理的文件的底部,如下所示: (提供foo) (定义(x条)(+1 x)) ;; 单元测试 (模块+测试 (需要球拍/漂亮) (定义测试用例’(2 3 4)) (对于([测试用例]) (漂亮的印花(条形测试))) 这是可行的,但我希望避免对所有模块重复样板单元测试代码。由于以前从未在Racket中编写过宏,我不确定如何将各个部分装配在一起 我希望将以下代码扩展到上述样板文件版本: (提供foo) (定义(x条)(+1 x)) ;; 单元测试 (测试食物’(2 3 4)
(提供foo)
(定义(x条)(+1 x))
;; 单元测试
(模块+测试
(需要球拍/漂亮)
(定义测试用例’(2 3 4))
(对于([测试用例])
(漂亮的印花(条形测试)))
这是可行的,但我希望避免对所有模块重复样板单元测试代码。由于以前从未在Racket中编写过宏,我不确定如何将各个部分装配在一起
我希望将以下代码扩展到上述样板文件版本:
(提供foo)
(定义(x条)(+1 x))
;; 单元测试
(测试食物’(2 3 4))
对于测试
宏,您确定需要从宏生成要求
?如果定义test
的文件中需要racket/pretty
,则可以让test
宏生成pretty print
的用法,然后使用test
的文件中是否有require并不重要
例如,如果您有两个文件macro.rkt
和use.rkt
:
文件macro.rkt
:
文件使用.rkt
:
然后,对pretty print
的引用在宏的输出中起作用,即使它在use.rkt
中通常不可用。它之所以有效,是因为pretty print
的作用域来自宏定义站点,而不是使用站点
这能解决您的问题吗?对于
测试
宏,您确定需要从宏生成要求
?如果定义test
的文件中需要racket/pretty
,则可以让test
宏生成pretty print
的用法,然后使用test
的文件中是否有require并不重要
例如,如果您有两个文件macro.rkt
和use.rkt
:
文件macro.rkt
:
文件使用.rkt
:
然后,对pretty print
的引用在宏的输出中起作用,即使它在use.rkt
中通常不可用。它之所以有效,是因为pretty print
的作用域来自宏定义站点,而不是使用站点
这能解决您的问题吗?如果我能生成
所需的,那就太理想了。将require放入(模块+测试…
)的一个原因(我没有提到)是它似乎减少了编译时间。如果我能生成require
,那将是理想的。将require放入(模块+测试…
的一个原因(我没有提到)是它似乎减少了编译时间。
#lang racket
(provide test)
(require racket/pretty
syntax/parse/define)
(define-simple-macro (test fn:id args:expr)
(module+ test
(define testcases args)
(for ([test testcases])
(pretty-print (fn test)))))
#lang racket
(require "macro.rkt")
(provide foo)
(define (foo x) (+ 1 x))
;; unit tests
(test foo '(2 3 4))