首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用(ns (:require :refer))重命名

如何使用(ns (:require :refer))重命名
EN

Stack Overflow用户
提问于 2013-01-31 02:19:15
回答 4查看 3.3K关注 0票数 13

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

代码语言:javascript
复制
(ns example.core 
  (:require [clj-json.core :refer [parse-string]]))

而不是

代码语言:javascript
复制
(ns example.core 
  (:use [clj-json.core :only [parse-string]]))

use支持的处理:rename的推荐方式是什么?具体地说,假设我想要require clojure.data.zip并重命名与clojure.core冲突的ancestorsdescendants函数。

换句话说,我想知道的require等价物是

代码语言:javascript
复制
(:use 
  [clojure.data.zip :rename {ancestors xml-ancestors, 
                             descendants xml-descendants})
EN

回答 4

Stack Overflow用户

发布于 2014-11-25 16:58:24

代码语言:javascript
复制
(ns foo
  (:require [clojure.data.zip :refer [ancestors descendants] :rename {ancestors xml-ancestors descendants xml-descendants}]))
票数 15
EN

Stack Overflow用户

发布于 2013-01-31 05:44:46

您在一步中使用:require,然后在下一步使用:rename进行:refer

代码语言:javascript
复制
(ns foo
  (:require clojure.data.zip)
  (:refer [clojure.data.zip :rename {ancestors xml-ancestors,
                                     descendants xml-descendants})

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

票数 12
EN

Stack Overflow用户

发布于 2013-01-31 03:08:28

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

下面是我要做的:使用:as对包进行:require并为其添加别名

代码语言:javascript
复制
(ns some.big.name.space
  (:require [clojure.data.zip  :as  cdz])
  ... some more imports, maybe ...)

然后,可以使用指定的前缀访问符号,并且不会与我的some.big.name.space命名空间中的任何符号冲突:

代码语言:javascript
复制
(def some-list [cdz/ancestors cdz/descendants ancestors descendants])

如果别名很短,输入它也不会有什么问题,而且我觉得我的代码更清晰了-- cdz/是一个很好的视觉提示,表明该符号是一个导入。

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

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14610957

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档