在Clojure 1.4中,require中的refer是什么用途?

时间:2012-04-27 21:32:24

标签: clojure

使用:refer中的:require:only中使用:use有什么好处?以下是同义词吗?

(ns so.example (:use [my.lib :only [function]]))

(ns so.example (:require [my.lib :refer [function]]))

3 个答案:

答案 0 :(得分:82)

:refer添加到:require的主要想法是完全摆脱:use,只留下一个运算符来加载其他包。您可以使用:use ...

模拟现有的(:require [my.lib :refer :all])

答案 1 :(得分:26)

是的,它们是等价的,

:refer:require是构建命名空间所需的基本操作。 :use更方便

  • :require导致加载类
  • :refer在名称空间中添加了一些东西,它实际上只是一张地图(实际上是几张地图)
  • :use:refer + :require

它可能看起来像它,命名空间确实没有魔力

如果您创建这样的命名空间

(ns so.example (:use my.lib))

等同于:require将是:

(ns so.example (:require [my.lib :refer [function1 function2 function3 
                                         list every function in example 
                                         here and remember to keep it 
                                         up to date ]]))

答案 2 :(得分:1)

从1.4.0版本开始,不再有充分的理由使用它。使用require:改为参考。从Clojure 1.4.0更改日志:“require现在可以采用:引用选项。:refer从名称空间中获取符号列表,或者:引入所有公共变量。” (来自https://8thlight.com/blog/colin-jones/2010/12/05/clojure-libs-and-namespaces-require-use-import-and-ns.html