Welchen Vorteil hat die Verwendung von :refer
in :require
gegenüber der Verwendung von :only
in :use
? Sind die folgenden auch?
(ns so.example (:use [my.lib :only [function]]))
und
(ns so.example (:require [my.lib :refer [function]]))
Leitgedanke der Zugabe :refer
zu :require
ist , um vollständig loszuwerden :use
, so dass nur ein Bediener andere Pakete zu laden. Sie können vorhandene :use
mit (:require [my.lib :refer :all])
...
:refer
dass wir das loswerden können:use
, aber können Sie mich auf eine Dokumentation verweisen, die darauf hinweist, dass dies die Idee war? Ich persönlich halte das:use
in bestimmten Fällen für zweckmäßig, beispielsweise beiclojure.test
. Warum nicht:use
in solchen Fällen verwenden?ja, sie sind gleichwertig,
:refer
und:require
sind die grundlegenden Operationen, die zum Erstellen von Namespaces erforderlich sind.:use
ist praktischer:require
bewirkt, dass Klassen geladen werden:refer
fügt dem Namensraum Dinge hinzu, die eigentlich nur eine Karte sind (eigentlich ein paar Karten):use
ist:refer
+:require
So sehr es auch aussehen mag, Namespaces haben wirklich keine Magie
wenn Sie einen Namespace wie diesen erstellen
(ns so.example (:use my.lib))
das Äquivalent mit: erfordern wäre:
(ns so.example (:require [my.lib :refer [function1 function2 function3 list every function in example here and remember to keep it up to date ]]))
quelle
:refer
hinzugefügt wurde:require
. Welches Problem wurde gelöst, das noch nicht geschehen war?:refer
zu:require
ist , um loszuwerden , vollständig aus:use
. Jetzt können Sie:use
mit(:require [my.lib :refer :all])
...Ab der Version 1.4.0 gibt es keinen guten Grund mehr, die Verwendung zu verwenden. Verwenden Sie require: beziehen Sie sich stattdessen. Aus dem Clojure 1.4.0-Änderungsprotokoll: "require kann jetzt eine: refer-Option verwenden .: Refer nimmt eine Liste von Symbolen, auf die aus dem Namespace verwiesen werden soll, oder: all, um alle öffentlichen Variablen einzufügen." (von https://8thlight.com/blog/colin-jones/2010/12/05/clojure-libs-and-namespaces-require-use-import-and-ns.html )
quelle