Il y a quelque chose que je ne comprends pas très bien quand je lis du code Clojure (disons de divers projets sur GitHub): dans l'expression :require
, est-ce que vous devez utiliser :as
lorsque vous n'utilisez que des fonctions auxquelles vous faites référence? ? Aussi, je ne suis pas sûr qu'il y ait une différence entre Clojure et ClojureScript de ce point de vue, ni s'il y a une convention.Sont: référer et: être utilisé simultanément?
Par exemple (j'utilise les chats bibliothèque pour les exemples, mais c'est juste un exemple) si je fais ceci:
(ns example.core
(:require
[cats.core]
[cats.monad.maybe :as maybe]))
, disons, le REPL que je peux faire ceci:
REPL> (cats.core/mappend (maybe/just 1))
Mais ce n'est pas très pratique, donc je peux le faire à la place:
(ns example.core
(:require
[cats.core :as m]
[cats.monad.maybe :as maybe]))
REPL> (m/mappend (maybe/just 1))
maintenant, au cas où j'utiliser mappend
(et quelques autres) tout le temps, je pouvais faire:
(ns example.core
(:require
[cats.core :refer [mappend]]
[cats.monad.maybe :as maybe]))
REPL> (mappend (maybe/just 1))
Ma question est: est-il utile en utilisant à la fois :as
et :refer
, comme dans l'exemple suivant?
(ns example.core
(:require
[cats.core :as m :refer [mappend]] ; does this make any sense?
[cats.monad.maybe :as maybe]))
Je comprends que je sois en utilisant, par exemple, mappend
tout le temps et peut vouloir s'y référer directement comme mappend
mais bind
pas souvent à l'aide :refer
mais encore assez souvent pour que l'écriture cats.core/bind
n'est pas pratique, alors j'utiliserais m/bind
?
Y a-t-il une règle? Comme si vous utilisez :as
vous ne devriez pas utiliser :refer
, ou l'inverse? Ou que vous devriez toujours utiliser les deux? En ce qui concerne ClojureScript, fonctionne-t-il exactement de la même manière?
Oui, et parfois vous souhaitez utiliser les deux en même temps, par exemple lorsque vous décidez d'utiliser core.async 'primitives' sans préfixe d'espace de nommage (': refer [!]') Mais vous devez éviter les conflits avec Clojure core ('async/into'). – glts
@glts: ah c'est très intéressant. Et je n'ai pas pensé aux affrontements: ça a beaucoup de sens. Merci à vous deux. –