有什么好处没有使用:refer
中:require
有超过使用:only
中:use
?以下是同义词吗?
(ns so.example (:use [my.lib :only [function]]))
和
(ns so.example (:require [my.lib :refer [function]]))
Answers:
增加的主要思想:refer
来:require
就是要彻底摆脱的:use
,只留下一个运营商来加载其他包。您可以:use
使用(:require [my.lib :refer :all])
...模拟现有
是的,它们是等效的,
: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 ]]))
:refer
要添加到中:require
。尚未解决的问题是什么?
:refer
来:require
就是要彻底从摆脱:use
。现在您可以:use
使用(:require [my.lib :refer :all])
...
从1.4.0版本开始,不再有充分的理由使用use。使用require:refer代替。在Clojure 1.4.0更改日志中:“ require现在可以使用:refer选项。:refer可以使用符号列表从名称空间中进行引用,或者:all可以引入所有公共变量。” (摘自 https://8thlight.com/blog/colin-jones/2010/12/05/clojure-libs-and-namespaces-require-use-import-and-ns.html)
:refer
可以使我们摆脱:use
,但是您能指出一些表明这是想法的文档吗?我个人认为:use
在某些情况下比较方便,例如使用clojure.test
。为什么:use
在这种情况下不使用?