Ракетка: Как обеспечить / требовать только привязки? - PullRequest
1 голос
/ 13 января 2020

В файле 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? (Я думал, что (provide add42) только сделает это).

1 Ответ

2 голосов
/ 13 января 2020

Вроде. Вы можете изменить add42.rkt, чтобы эффекты не запускались, когда этого требует другой модуль.

Если вы можете реорганизовать add42.rkt, чтобы все эффекты были в подмодуле main, то эти эффекты будут происходить, когда add42.rkt запускается сам по себе, но не тогда, когда это требуется для test.rkt.

В add42.rkt, для разделения эффектов на подмодуль main с помощью module+ main:

#lang racket

(provide add42)

(define (add42 x)
  (+ x 42))

(module+ main
  (displayln "-- add42.rkt --"))

Эффекты в основном подмодуле будут запускаться после других выражений верхнего уровня, только если add42.rkt запускается как основная программа, а не как библиотека.

...