【发布时间】: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
在:require 中使用:refer 比在:use 中使用:only 有什么优势?以下是同义词吗?
(ns so.example (:use [my.lib :only [function]]))
和
(ns so.example (:require [my.lib :refer [function]]))
【问题讨论】:
标签: clojure
从 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)
【讨论】:
将:refer 添加到:require 的主要思想是完全摆脱:use,只留下一个操作员来加载其他包。你可以用(:require [my.lib :refer :all])模拟现有的:use...
【讨论】:
:refer 可以让我们摆脱@987654328@,但您能否指出表明这是这个想法的文档?我个人认为:use在某些情况下很方便,比如clojure.test。在这种情况下为什么不使用: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。有什么问题没有解决?
:refer 添加到:require 的主要思想是完全摆脱:use。现在你可以用(:require [my.lib :refer :all])模拟:use...