Quel avantage l'utilisation de :refer
dans :require
J'ai fini d'utiliser :only
dans :use
? Les éléments suivants sont-ils également synonymes?
(ns so.example (:use [my.lib :only [function]]))
et
(ns so.example (:require [my.lib :refer [function]]))
Idée principale d'ajouter :refer
à :require
est de se débarrasser complètement de :use
, ne laissant qu'un seul opérateur pour charger d'autres packages. Vous pouvez émuler les :use
avec (:require [my.lib :refer :all])
...
oui, ils sont équivalents,
:refer
et :require
sont les opérations de base requises pour créer des espaces de noms. :use
est plus pratique
:require
provoque le chargement des classes:refer
ajoute des choses à l'espace de nom qui n'est en fait qu'une carte (en fait, quelques cartes):use
est :refer
+ :require
autant que cela puisse ressembler, il n'y a vraiment pas de magie dans les espaces de noms
si vous créez un espace de noms comme celui-ci
(ns so.example (:use my.lib))
l'équivalent avec: require serait:
(ns so.example (:require [my.lib :refer [function1 function2 function3
list every function in example
here and remember to keep it
up to date ]]))
Depuis la version 1.4.0, il n'y a plus de bonne raison d'utiliser use. Utilisez require: reportez-vous à la place. Dans le changelog de Clojure 1.4.0: "require peut maintenant prendre une option: refer.: Refer prend une liste de symboles à référencer depuis l'espace de noms ou: all pour faire entrer toutes les variables publiques." (depuis https://8thlight.com/blog/colin-jones/2010/12/05/clojure-libs-and-namespaces-require-use-import-and-ns.html )