73

using in比 using :referin:require有什么优势?以下是同义词吗?:only:use

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

(ns so.example (:require [my.lib :refer [function]]))
4

3 回答 3

84

:refer添加到的主要思想:require是完全摆脱:use,只留下一个操作员来加载其他包。您可以模拟现有:use...(:require [my.lib :refer :all])

于 2012-04-29T08:09:03.663 回答
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 ]]))
于 2012-04-27T21:35:41.890 回答
1

从 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

于 2016-08-19T12:02:18.457 回答