在Clojure 1.4中,require内引用的用途是什么?


73

有什么好处没有使用:refer:require有超过使用:only:use?以下是同义词吗?

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

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

Answers:


83

增加的主要思想:refer:require就是要彻底摆脱的:use,只留下一个运营商来加载其他包。您可以:use使用(:require [my.lib :refer :all])...模拟现有


我知道这:refer可以使我们摆脱:use,但是您能指出一些表明这是想法的文档吗?我个人认为:use在某些情况下比较方便,例如使用clojure.test。为什么:use在这种情况下不使用?
埃里克·威尔逊

10
参见dev.clojure.org/jira/browse/CLJ-879,并链接至clojure-dev邮件列表中的讨论...
Alex Ott

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

它几乎与:as一起使用时给软件包起了短名称。哦,它是第一位的。使用调用:refer,请参考不使用:use
Arthur Ulfeldt 2012年

我仍然不明白为什么:refer要添加到中:require。尚未解决的问题是什么?
Andrew

16
安德鲁,增加的主要思想:refer:require就是要彻底从摆脱:use。现在您可以:use使用(:require [my.lib :refer :all])...
Alex Ott 2012年

@AlexOtt谢谢。如果您将评论作为答案,我会接受。
Andrew

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.