2015-09-20 3 views
2

Я хотел бы выборочно запускать подмодули модуля Racket из другого модуля. Пожалуйста, помогите мне заполнить пробелы!Запуск подмодулей других модулей

Файл 1

#lang racket/base 

;; <big file, lots of code> 

(module+ small-tests 
    ;; basic correctness checks 
    (displayln "Small tests pass!") 
) 

(module+ big-tests 
    ;; heavy duty stress tests 
    (displayln "Big tests pass!") 
) 

Файл 2

#lang racket/base 

(module+ main 
    ;; Trigger either the small-tests or the big-tests, 
    ;; depending on what's written here. 
    (require '???) 
) 

Было бы здорово, если работает большие испытания будут автоматически запускать небольшие тесты тоже.

+0

Я немного смущен тем, с чем конкретно вы столкнулись, но может ['dynamic-require'] (http://docs.racket-lang.org/reference/Module_Names_and_Loading.html?q=dynamic -require #% 28def ._% 28% 28quote._ ~ 23 ~ 25kernel% 29._dynamic-require% 29% 29) help здесь? –

+0

Если вы просто хотите знать синтаксис, требующий подмодуля, это просто ['subod'] (http://docs.racket-lang.org/reference/require.html?q=submod#%28form._%28 % 28lib._racket% 2Fprivate% 2Fbase..rkt% 29._submod% 29% 29). –

ответ

2

Благодаря Лейф и намеки Алексиса, как получить файл 2 запустить стрелковые тесты подмодуля заменить '??? с:

(submod "file1.rkt" small-tests) 

Кроме того, редактирование подмодуля big-tests для включения строки:

(require (submod ".." small-tests)) 

вызовет как небольшие & большие тесты для запуска, когда Файл 2 выполняет (require (submod "file1.rkt" big-tests)).

+1

Совет. Хотя это нормально для простого 'require', вы обнаружите, что' (dynamic-require '(submod ".." foo) #f) 'errors с' standard-module-name-resolver: нет базового пути для относительный путь подмодуля: (подмод ".." bar) '. Используйте 'quote-module-path' из' syntax/location': '(dynamic-require (quote-module-path" .. "bar) #f)'. –

+0

О, ничего себе. Спасибо, что указали это. –

1

Форма submod используется для подмодуля модуля.

В качестве примера:

#lang racket 

(module A racket 
    (module+ main 
    (displayln "Hello World"))) 

(module B racket 
    (require (submod ".." A main))) 

(require 'B) 
Смежные вопросы