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
作为主程序运行,而不是作为库运行时,主子模块中的效果才会在其他顶级表达式之后运行。

就是这样。非常感谢。