使用:refer
中的:require
在:only
中使用:use
有什么好处?以下是同义词吗?
(ns so.example (:use [my.lib :only [function]]))
和
(ns so.example (:require [my.lib :refer [function]]))
答案 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)