Variables 如何使用(ns(:require:reference))重命名

Variables 如何使用(ns(:require:reference))重命名,variables,import,clojure,namespaces,Variables,Import,Clojure,Namespaces,我的理解是,建议现在使用 require:请参阅ns宏中的而不是use。例如,请执行以下操作: (ns example.core (:require [clj-json.core :refer [parse-string]])) 而不是 (ns example.core (:use [clj-json.core :only [parse-string]])) 处理的建议方法是什么:重命名哪些使用支持? 具体来说,假设我想要求 clojure.data.zip并重命名与clojur

我的理解是,建议现在使用
require:请参阅
ns
宏中的
而不是
use
。例如,请执行以下操作:

(ns example.core 
  (:require [clj-json.core :refer [parse-string]]))
而不是

(ns example.core 
  (:use [clj-json.core :only [parse-string]]))
处理
的建议方法是什么:重命名
哪些
使用
支持?
具体来说,假设我想
要求
clojure.data.zip并重命名与clojure.core冲突的
祖先
后代
函数

换句话说,我想知道对于

(:use 
  [clojure.data.zip :rename {ancestors xml-ancestors, 
                             descendants xml-descendants})

免责声明:我不知道“推荐”的方法。我只知道我会怎么做。我的解决方案可能不是惯用的Clojure,如果没有人能给出更好的答案,我会感到惊讶


下面是我要做的:
:需要
包,并使用
:as

(ns some.big.name.space
  (:require [clojure.data.zip  :as  cdz])
  ... some more imports, maybe ...)
然后可以使用指定的前缀访问符号,并且不要与my
some.big.name.space
命名空间中的任何符号冲突:

(def some-list [cdz/ancestors cdz/descendants ancestors descendants])
如果别名很短,我就很难键入它,而且我觉得我的代码更清晰--
cdz/
是一个很好的视觉提示,表明该符号是一个导入


我知道这并没有真正回答你的确切问题——如何使用
:rename
:require
——但我觉得这值得一提,因为它避免了污染我的名称空间,而且我不必弄乱Clojure的符号解析机制,然后
:在下一节中用
:重命名
引用

(ns foo
  (:require clojure.data.zip)
  (:refer [clojure.data.zip :rename {ancestors xml-ancestors,
                                     descendants xml-descendants})

:use
一直是
:require
+
:refere
的缩写,现在
:refere
选项是
:require
最简单的
refere

的缩写,如果需要从Clojure core重命名函数或宏,请使用:

(ns foo
  "Contains foo functionality."
  (:refer-clojure :rename {map core-map}))

谢谢你的回复。你的观点很好。我知道这种方法,只是好奇如果我想的话,我该如何重命名to@apolenur是的,很抱歉,我的答案没有多大帮助。使用
:在
:reference
之后直接重命名,正如@user1338062在他/她的答案中所建议的那样,这样做更有效,更简单:
(ns foo
  (:require [clojure.data.zip :refer [ancestors descendants] :rename {ancestors xml-ancestors descendants xml-descendants}]))