使用前缀从模块导入而不暴露非前缀的东西

时间:2016-12-20 23:49:17

标签: racket

我希望只能从Racket中的模块导入命名空间的项目。 prefix-in函数允许我使用前缀从模块访问函数,但它不会隐藏旧名称。

$ racket
Welcome to Racket v6.6.
> (require (prefix-in tcp: racket/tcp))
> tcp-accept
#<procedure:tcp-accept>
> tcp:tcp-accept
#<procedure:tcp-accept>

是否有一种隐藏未加前缀名称的简单方法?

1 个答案:

答案 0 :(得分:3)

prefix-in表单只导入前缀名称,而不是未加前缀的名称。但是,racket语言默认包含racket/tcp模块,因此在REPL启动时已导入该模块。如果您使用#lang racket/base,则不会导入tcp-accept,因此带前缀的导入将是唯一导入的标识符。您可以使用REPL中的-I racket/base选项来模拟它:

$ racket -iI racket/base
Welcome to Racket v6.7.0.4.
> (require (prefix-in tcp: racket/tcp))
> tcp-accept
; tcp-accept: undefined;
;  cannot reference undefined identifier
; [,bt for context]
> tcp:tcp-accept
#<procedure:tcp-accept>