2015-08-24 3 views
6

Gibt es einen einfachen Weg für mich, ein Submodul in der aktuellen Datei im Racket-Modus in Emacs zu laden?Racket REPL und Submodule

Zum Beispiel, wenn ich die folgenden Datei

#lang racket 

(define (foo x) 
    x) 

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

habe und ich traf f5 in Schläger-Modus, um die repl zu starten dann foo verfügbar ist, aber bar nicht.

Antwort

4

Sie dynamic-enter! kombinieren und quote-module-path dies zu tun.

eine repl Interaktion für den Code oben, dass angesichts Sie auf dem Laufenden:

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

Alternativ Sie dynamic-require/expose (das belichten Teil Sie Dinge erfordern können, die nicht zur Verfügung gestellt werden) verwenden könnte, wie here getan.

+0

Danke für die Antwort, Leif! Ich habe jetzt gerade [Ausgabe 151] (https://github.com/greghendershott/racket-mode/issues/151) dafür geöffnet. –

+0

Ich habe gerade ein Commit zum Master verschmolzen, sollte in Kürze zu MELPA durchfließen. 'Racket-Run' läuft nun der innerste Submodul umschließende Punkt. –

+0

Super, danke für das Diong. –

0

Es funktioniert auf die gleiche Weise in DrRacket. Sie müssen provide Bar aus dem Submodul, und require das Submodul, um es zu verwenden. Versuchen Sie, den folgenden Code:

#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