有没有办法要求一个模块并更改其某些绑定的名称?

问题描述 投票:0回答:1

我需要从一个单元测试文件测试同一功能的不同实现,不同的文件包含不同的实现。

问题是,在正常的需求中,所有内容都是在没有名称空间的情况下导入的,因此具有相同名称的函数不能共存。

有没有办法将导入的模块绑定到名称空间?或者重命名导入模块的元素?

类似的东西

; All files contain a function named "fun" that needs to be tested.
(require 
  (rename "implementation-one.rkt" fun fun-one) 
  (rename "implementation-two.rkt" fun fun-two)
  (rename "implementation-three.rkt" fun fun-three))

(check-equal? (fun-one 0) 0 "first implementation")
(check-equal? (fun-two 0) 0 "second implementation")
(check-equal? (fun-three 0) 0 "third implementation")

在这里,我从每个实现文件中导入

fun
函数,并将其重命名为其他名称。但这不是有效的球拍。

我查看了模块,但似乎发生了同样的问题;当需要一个模块时,内部的所有内容都会在没有名称空间的情况下公开。

有没有办法指定导入模块的名称,或更改模块内容的名称?也许通过重命名模块的绑定,或者通过将导入封装在名称空间中,或者某种命名导入?在 Racket 中通常如何解决这样的名称冲突?

模块是否应该包含封装每个实现的结构和/或对象?或者有没有办法用提供功能的简单模块来做到这一点?

module racket require
1个回答
2
投票
(require 
  (rename-in "implementation-one.rkt" [fun fun-one]) 
  (rename-in "implementation-two.rkt" [fun fun-two])
  (rename-in "implementation-three.rkt" [fun fun-three]))

请参阅手册了解

require

© www.soinside.com 2019 - 2024. All rights reserved.