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 ...)
然后可以使用指定的前缀访问符号,并且不要与mysome.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}]))