2016-12-20 96 views
1

我想只能從Racket中的模塊導入命名空間項目。前綴函數允許我使用前綴從模塊中訪問函數,但它不會隱藏舊名稱。使用前綴從模塊導入而不暴露非前綴的東西

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

有沒有簡單的方法來隱藏無前綴的名稱?

回答

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>