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]]))
Antworten:
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])
...
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 ]]))
: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 )
: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?