2015-08-24 6 views
6

क्या एमएक्स में रैकेट मोड में वर्तमान फ़ाइल में एक सबमिशन लोड करने का कोई आसान तरीका है?रैकेट आरईपीएल और सबमोड्यूल

उदाहरण के लिए अगर मैं निम्न फ़ाइल

#lang racket 

(define (foo x) 
    x) 

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

है और मैं रैकेट-मोड में F5 मारा तो repl शुरू करने के लिए foo उपलब्ध है, लेकिन bar नहीं है।

उत्तर

4

आप dynamic-enter! और quote-module-path गठजोड़ कर सकते हैं यह करने के लिए। के रूप में here किया

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

वैकल्पिक रूप से, आप इस्तेमाल कर सकते हैं dynamic-require/expose (बेनकाब हिस्सा आप चीजें हैं जो नहीं दिया जाता है की आवश्यकता होती है की अनुमति देता है),:

कि उपरोक्त कोड आप पोस्ट के लिए एक repl बातचीत को देखते हुए।

+0

इसका जवाब देने के लिए धन्यवाद, लीफ! मैंने अभी इसके लिए [मुद्दा 151] खोला है (https://github.com/greghendershott/racket-mode/issues/151) इसके लिए। –

+0

मैंने अभी मास्टर के लिए प्रतिबद्धता विलय कर दी है, जल्द ही एमईएलपीए के माध्यम से बहना चाहिए। 'रैकेट रन' अब सबसे निचला सबमिशन संलग्न बिंदु चलाता है। –

+0

बहुत बढ़िया, डायऑन के लिए धन्यवाद। –

0

यह ड्रैकेट में उसी तरह काम करता है। आपको सबमिशन से provide बार, और require इसका उपयोग करने के लिए सबमिशन है। निम्नलिखित कोड का प्रयास करें:

#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