在Racket中导入重叠的模块

罗尔德

我想加载图像并在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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章