在 Clojure 1.4中,请求中的引用有什么用?

:require中使用 :refer比在 :use中使用 :only有什么优势? 下面是同义词吗?

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

还有

(ns so.example (:require [my.lib :refer [function]]))
14828 次浏览

是的,它们是等价的,

:refer:require是构建名称空间所需的基本操作

  • :require导致加载类
  • :refer将一些东西添加到名称空间,这实际上只是一个映射(实际上是几个映射)
  • :use: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])..。

在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)