【问题标题】:In Clojure 1.4 what is the use of refer within require?在 Clojure 1.4 中,在 require 中引用的用途是什么?
【发布时间】:2012-05-08 15:29:28
【问题描述】:

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

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

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

【问题讨论】:

    标签: clojure


    【解决方案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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 我知道:refer 可以让我们摆脱@​​987654328@,但您能否指出表明这是这个想法的文档?我个人认为:use在某些情况下很方便,比如clojure.test。在这种情况下为什么不使用:use
      • 查看 dev.clojure.org/jira/browse/CLJ-879 并链接到 clojure-dev 邮件列表中的讨论...
      【解决方案3】:

      是的,它们是等价的,

      :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 ]]))
      

      【讨论】:

      • 它几乎总是与 :as 一起使用,为包提供短名称。哦,它是第一位的。使用调用 :refer,refer 不使用 :use
      • 我还是不明白为什么:refer被添加到:require。有什么问题没有解决?
      • Andrew,将:refer 添加到:require 的主要思想是完全摆脱:use。现在你可以用(:require [my.lib :refer :all])模拟:use...
      • @AlexOtt 谢谢。如果您将评论作为答案,我会接受。
      猜你喜欢
      • 2011-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-09
      • 2021-06-18
      • 2016-07-05
      相关资源
      最近更新 更多