Racket 球拍:如何仅提供/要求绑定?
在文件Racket 球拍:如何仅提供/要求绑定?,racket,Racket,在文件add42.rkt中,我有以下定义+效果: #lang racket (provide add42) (define (add42 x) (+ x 42)) (displayln "-- add42.rkt --") 在文件test.rkt中,我需要+test: #lang racket (require rackunit "add42.rkt") (check-equal? (add42 0) 42) 测试工作正常,但是,--add42.rkt--也会显示出来。是否有方
add42.rkt
中,我有以下定义+效果:
#lang racket
(provide add42)
(define (add42 x)
(+ x 42))
(displayln "-- add42.rkt --")
在文件test.rkt
中,我需要+test:
#lang racket
(require rackunit "add42.rkt")
(check-equal? (add42 0) 42)
测试工作正常,但是,
--add42.rkt--
也会显示出来。是否有方法仅从add42.rkt
导出函数定义?(我认为(提供add42)
只能这样做) 差不多。您可以更改add42.rkt
,以便在其他模块需要时效果不会运行
如果您可以重新组织add42.rkt
,使效果都在main
子模块中,那么这些效果将在add42.rkt
自身运行时发生,而不是在test.rkt
中需要时发生
在add42.rkt
中,使用module+main
将效果分成main
子模块:
#lang racket
(provide add42)
(define (add42 x)
(+ x 42))
(module+ main
(displayln "-- add42.rkt --"))
只有当
add42.rkt
作为主程序运行,而不是作为库运行时,主子模块中的效果才会在其他顶级表达式之后运行。就是这样。非常感谢。