2015-08-24 16 views
6

Geçerli dosyada submodule, emacs'ta raket modunda yükleme yapmanın kolay bir yolu var mı? ÖrneğinRaket REPL ve Altmodüller

Aşağıdaki dosyayı

#lang racket 

(define (foo x) 
    x) 

(module+ sub 
    (define (bar x y) 
    x)) 

var ve foo kullanılabilir, ancak bar sonra Repl başlatmak için raket-modunda f5 isabet eğer değildir.

cevap

4

Bunu yapmak için dynamic-enter! ve quote-module-path birleştirebilirsiniz.

Yayınladığınız yukarıdaki kodu için bir repl etkileşimi göz önüne alındığında:

> (require racket/enter syntax/location) 
> (dynamic-enter! (quote-module-path sub)) 
> bar 
#<procedure:bar> 

Alternatif olarak, dynamic-require/expose (açığa parçası sağlanan olmayan şeyleri gerektirir sağlar) kullanabilir, here tamam olarak.

+0

Bunu yanıtladığınız için teşekkür ederiz, Leif! Bunun için şimdi [sayı 151] (https://github.com/greghendershott/racket-mode/issues/151) açtım. –

+0

Ben sadece master için bir taahhüt birleştirdim, kısa bir süre MELPA'ya akmalıdır. 'raket-run'' şimdi en içteki alt modül kapama noktasını çalıştırıyor. –

+0

Harika, bu diong için teşekkürler. –

0

DrRacket'te de aynı şekilde çalışır. Alt modülden provide çubuğuna ve kullanmak için alt'a ihtiyacınız vardır. Aşağıdaki kodu deneyin:

#lang racket 

(define (foo x) 
    x) 

(module+ sub 
    (define (bar x y) 
    x) 
    (provide bar)) 

;; (bar 1 2) -- undefined 

(require (submod "." sub)) 
(bar 1 2) ;; -- works here