我的理解是,现在建议在ns宏中使用require :refer而不是use。例如,执行以下操作:
(ns example.core
(:require [clj-json.core :refer [parse-string]]))而不是
(ns example.core
(:use [clj-json.core :only [parse-string]]))use支持的处理:rename的推荐方式是什么?具体地说,假设我想要require clojure.data.zip并重命名与clojure.core冲突的ancestors和descendants函数。
换句话说,我想知道的require等价物是
(:use
[clojure.data.zip :rename {ancestors xml-ancestors,
descendants xml-descendants})发布于 2014-11-25 16:58:24
(ns foo
(:require [clojure.data.zip :refer [ancestors descendants] :rename {ancestors xml-ancestors descendants xml-descendants}]))发布于 2013-01-31 05:44:46
您在一步中使用:require,然后在下一步使用:rename进行:refer。
(ns foo
(:require clojure.data.zip)
(:refer [clojure.data.zip :rename {ancestors xml-ancestors,
descendants xml-descendants}):use一直是:require+:refer的缩写,现在:require的:refer选项是最简单的refer的缩写。
发布于 2013-01-31 03:08:28
免责声明:我不知道这样做的“推荐”方式。我只知道我会怎么做。我的解决方案可能不是惯用的Clojure,如果没有人提出更好的答案,我会感到惊讶。
下面是我要做的:使用:as对包进行:require并为其添加别名
(ns some.big.name.space
(:require [clojure.data.zip :as cdz])
... some more imports, maybe ...)然后,可以使用指定的前缀访问符号,并且不会与我的some.big.name.space命名空间中的任何符号冲突:
(def some-list [cdz/ancestors cdz/descendants ancestors descendants])如果别名很短,输入它也不会有什么问题,而且我觉得我的代码更清晰了-- cdz/是一个很好的视觉提示,表明该符号是一个导入。
我知道这并没有真正回答您的确切问题--如何在:require中使用:rename --但我觉得它值得一提,因为它避免了污染我的名称空间,而且我也不必弄乱Clojure的符号解析机制。
https://stackoverflow.com/questions/14610957
复制相似问题