2013-07-27 32 views
7

Tôi muốn tải hình ảnh và tạo hoạt ảnh trong Racket. Tôi có thể làm điều đó dễ dàng trong Dr Racket, nhưng tôi đang sử dụng Emacs với Geiser. Để tải hình ảnh tôi cần phải:Nhập khẩu mô-đun chồng chéo trong Racket

(require racket/draw) 

Tiếp theo, để vẽ hình ảnh này lên màn hình, tôi dự định sử dụng mô-đun lớn nhất. Để tải module này tôi phải:

(require 2thdp/image) 

Nhưng tôi nhận được lỗi này:

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

này về cơ bản có nghĩa là tôi không thể nhập các mô-đun hai lần. Nhưng tôi cần cả hai thư viện này. Làm cách nào để tránh sự cố này?

Trả lời

11

Khi hai mô-đun cung cấp chức năng có cùng tên, bạn có thể đổi tên các hàm khi nhập.

Cách đơn giản để thực hiện việc này là đổi tên tất cả các chức năng từ một trong các mô đun, đổi tên tất cả các mô-đun bằng cách sử dụng một số tiền tố chung. Bạn có thể làm điều này với các modifier 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 

Bằng cách này, không có gì đặc biệt về : là, nó chỉ là một ước tôi đã nhìn thấy sử dụng. Thay vì htdp: tiền tố có thể là (nói) htdp-. Bất kể bạn sử dụng cái gì, nó cũng được thêm vào mỗi tên được cung cấp bởi mô-đun đó.

Nếu chỉ có một xung đột tên hàm, bạn có thể đổi tên chỉ một hàm từ một trong các mô-đun, sử dụng rename-in.

Để biết thêm thông tin, xem require.

+0

Cảm ơn bạn rất nhiều. – Roald

+1

Sửa tôi nếu tôi sai, nhưng truyền thống đến từ các gói của CL phải không? – jozefg

+0

@Chris Cảm ơn bạn đã chỉnh sửa rắm não của tôi, ở đó! –