Welchen Vorteil hat die Verwendung von :referin :requiregegenüber der Verwendung von :onlyin :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 :referzu :requireist , um vollständig loszuwerden :use, so dass nur ein Bediener andere Pakete zu laden. Sie können vorhandene :usemit (:require [my.lib :refer :all])...
ja, sie sind gleichwertig,
:referund :requiresind die grundlegenden Operationen, die zum Erstellen von Namespaces erforderlich sind. :useist praktischer
:require bewirkt, dass Klassen geladen werden:refer fügt dem Namensraum Dinge hinzu, die eigentlich nur eine Karte sind (eigentlich ein paar Karten):useist :refer+:requireSo 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 ]]))
:referhinzugefügt wurde :require. Welches Problem wurde gelöst, das noch nicht geschehen war?
:referzu :requireist , um loszuwerden , vollständig aus :use. Jetzt können Sie :usemit (: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 )
:referdass 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:usein bestimmten Fällen für zweckmäßig, beispielsweise beiclojure.test. Warum nicht:usein solchen Fällen verwenden?