在Clojure中,:require
中使用 :refer
有什么优势,与在 :use
中使用 :only
相比有何区别?下面两者是同义词吗?
(ns so.example (:use [my.lib :only [function]]))
和
(ns so.example (:require [my.lib :refer [function]]))
在Clojure中,:require
中使用 :refer
有什么优势,与在 :use
中使用 :only
相比有何区别?下面两者是同义词吗?
(ns so.example (:use [my.lib :only [function]]))
和
(ns so.example (:require [my.lib :refer [function]]))
将:refer
添加到:require
的主要想法是彻底摆脱:use
,只留下一个操作符来加载其他包。您可以通过(:require [my.lib :refer :all])
来模拟现有的:use
...
是的,它们是等效的。
: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
中。有哪些问题得到了解决,而以前没有解决? - Andrew:refer
到:require
的主要目的是完全摆脱:use
。现在你可以使用 (:require [my.lib :refer :all])
来模拟 :use
... - Alex Ott
:refer
允许我们摆脱:use
,但您能否指出证明这是创意的文档?我个人认为,在某些情况下,如与clojure.test
一起使用时,:use
很方便。为什么不在这种情况下使用:use
呢? - Eric Wilson