在 :require中使用 :refer比在 :use中使用 :only有什么优势? 下面是同义词吗?
:require
:refer
:use
:only
(ns so.example (:use [my.lib :only [function]]))
还有
(ns so.example (:require [my.lib :refer [function]]))
是的,它们是等价的,
:refer和 :require是构建名称空间所需的基本操作
尽管名称空间看起来很像,但实际上并没有什么神奇之处
如果您创建这样的名称空间
(ns so.example (:use my.lib))
要求的等价物是:
(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的主要思想是完全去除 :use,只留下一个操作员来加载其他包。您可以模拟现有的 :use与 (:require [my.lib :refer :all])..。
(:require [my.lib :refer :all])
在1.4.0版本中,不再有使用的好理由。使用要求: 改为参考。来自 Clojure 1.4.0 changelog: “ need 现在可以采用: reference 选项。Reference 从名称空间获取一个符号列表来引用,或者: all 引入所有公共 var。” (来自 https://8thlight.com/blog/colin-jones/2010/12/05/clojure-libs-and-namespaces-require-use-import-and-ns.html)