我希望只能从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>
是否有一种隐藏未加前缀名称的简单方法?
答案 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>