2013-07-27 9 views
7

イメージをロードし、ラケットでアニメーションしたいと思います。私はDr. Racketで簡単に行うことができますが、私はGeiserと共にEmacsを使用しています。私がする必要があるイメージをロードするには:ラケットの重複モジュールのインポート

(require racket/draw) 

次へ]を、画面上にこのイメージを描画するために、私はビッグバンのモジュールを使用することを計画しています。私が持っているこのモジュールをロードするには、次の

(require 2thdp/image) 

をしかし、私はこのエラーを取得:これは基本的に、私は二回同じモジュールをインポートすることができないことを意味し

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

を。しかし、私はこれらの両方のライブラリが必要です。どうすればこの問題を回避できますか?

答えて

11

2つのモジュールが同じ名前の関数を提供する場合、インポート時に関数の名前を変更できます。

これを行う簡単な方法は、すべてのモジュールの機能を名前を変更し、共通の接頭辞を使用してすべての名前を変更することです。あなたはrequireからprefix-in修飾子でこれを行うことができます:ところで

(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 

:について特別なことは何も、それは私が使用見てきただけで、条約の、ありません。 htdp:の代わりに、接頭辞はhtdp-とすることができます。あなたが使用するものは、そのモジュールが提供するすべての名前の前に付加されます。

1つの関数名が競合する場合は、rename-inを使用して、モジュールのうちの1つの関数だけの名前を変更できます。

詳細については、requireを参照してください。

+0

ありがとうございます。 – Roald

+1

私が間違っていると私を訂正しますが、伝統はCLのパッケージから来ていますか? – jozefg

+0

@Chris私の脳のおならを編集していただきありがとうございます! –

関連する問題