2013-07-27 19 views
7

Ich möchte ein Bild laden und in Racket animieren. Ich kann es leicht im Dr. Racket machen, aber ich benutze Emacs mit Geiser. Um das Bild zu laden Ich muss:Überlappendes Modul importiert in Racket

(require racket/draw) 

Als nächstes zeichnen das Bild auf dem Bildschirm, ich plane, das Big-Bang-Modul zu verwenden. Um dieses Modul zu laden, muss ich:

(require 2thdp/image) 

Aber ich bekomme diese Fehlermeldung:

module: identifier already imported from: 2htdp/image 
at: make-pen 
in: racket/draw 
errortrace...: 

Diese im Grunde bedeutet, dass ich nicht das gleiche Modul zweimal importieren. Aber ich brauche beide Bibliotheken. Wie vermeide ich dieses Problem?

Antwort

11

Wenn zwei Module Funktionen mit demselben Namen bereitstellen, können Sie die Funktionen beim Import umbenennen.

Ein einfacher Weg, dies zu tun, ist umzubenennen alle die Funktionen von einem der Module, alle umbenennen sie mit einem gemeinsamen Präfix. Sie können require mit dem prefix-in Modifikator dies zu tun:

(require racket/draw) 
(require (prefix-in htdp: 2htdp/image)) 

make-pen  ; the `make-pen` from racket/draw 
htdp:make-pen ; the `make-pen` from 2htdp 

By the way, es gibt nichts Besonderes an dem : ist, es ist nur eine Konvention, habe ich gesehen habe. Anstelle von htdp: könnte das Präfix (sagen wir) htdp- sein. Was immer Sie verwenden, es wird jedem von diesem Modul bereitgestellten Namen vorangestellt.

Wenn nur ein Funktionsname in Konflikt gerät, können Sie nur diese eine Funktion von einem der Module umbenennen, indem Sie rename-in verwenden.

Weitere Informationen finden Sie unter require.

+0

Vielen Dank. – Roald

+1

Korrigieren Sie mich, wenn ich falsch liege, aber die Tradition kommt von CL-Paketen richtig? – jozefg

+0

@Chris Vielen Dank für die Bearbeitung meines Gehirns Furz, da! –

Verwandte Themen