10

画像を読み込んで、Racket でアニメーション化したいと考えています。Dr.Racketでも簡単にできますが、GeiserでEmacsを使っています。画像をロードするには、次のことが必要です。

(require racket/draw)

次に、この画像を画面に描画するために、ビッグバン モジュールを使用する予定です。このモジュールをロードするには、次のことを行う必要があります。

(require 2thdp/image)

しかし、私はこのエラーが発生します:

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

これは基本的に、同じモジュールを 2 回インポートできないことを意味します。しかし、これらのライブラリの両方が必要です。この問題を回避するにはどうすればよいですか?

4

1 に答える 1

16

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

これを行う簡単な方法は、モジュールの 1 つからすべての関数の名前を変更し、共通のプレフィックスを使用してすべての関数の名前を変更することです。prefix-in修飾子を使用してこれを行うことができますrequire

(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:(say) を使用できますhtdp-。何を使用しても、そのモジュールによって提供されるすべての名前の先頭に追加されます。

1 つの関数名だけが競合する場合は、rename-in.

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

于 2013-07-27T14:27:52.127 に答える