我想加载图像并在Racket中对其进行动画处理。我可以在Racket博士中轻松地做到这一点,但是我将Emacs与Geiser一起使用。要加载图像,我需要:
(require racket/draw)
接下来,为了将此图像绘制到屏幕上,我计划使用big-bang模块。要加载此模块,我必须:
(require 2thdp/image)
但是我得到这个错误:
module: identifier already imported from: 2htdp/image
at: make-pen
in: racket/draw
errortrace...:
这基本上意味着我不能两次导入相同的模块。但是我需要这两个库。我如何避免这个问题?
当两个模块提供具有相同名称的功能时,可以在导入时重命名功能。
一种简单的方法是重命名一个模块中的所有功能,并使用一些公共前缀重命名所有功能。您可以使用以下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-
。无论您使用什么,它都将附加在该模块提供的每个名称之前。
如果只有一个函数名称发生冲突,则可以使用从模块之一中重命名该函数rename-in
。
有关更多信息,请参见require
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句