Bloquer les commentaires dans Clojure


Réponses:


145

En fait, il y a un moyen!


(comment

(defn hey [] ("Hey there!"))

Check me out! )

Emballez simplement vos commentaires dans (commentaire ..) :)

S'amuser!


4
Je pensais que mon # || # me manquait mais c'est bien mieux.
unj2

4
J'espère que vous vous amusez avec Clojure. :)
Rayne

14
Un mot d'avertissement: il semble que tout ce qui se trouve à l'intérieur d'un (commentaire ...) doit être une forme appropriée; par exemple (comment hello: world) est bien mais (comment hello: world) donne une exception. [Edit:] Il semble que j'aurais dû lire la réponse de Greg Hewgill avant de poster ce commentaire ... eh bien, je le laisserai quand même au cas où quelqu'un ferait la même chose que moi.
paul

19
Un mot d'avertissement - la macro (commentaire) devient nulle. Utilisez #_ pour commenter un seul formulaire, ou #_ (comment ...) pour commenter plusieurs formulaires sans insérer de nil.
traitez bien vos mods

Il me rappelle cette macro: stackoverflow.com/questions/3732173/…
Felipe

100

Clojure prend en charge une #_macro de lecteur qui ignore complètement le formulaire suivant. Ceci est mentionné sur la page concernant le lecteur Clojure . Il y a aussi la macro de commentaire qui a un effet similaire, mais qui est implémentée différemment.

Les deux éléments ci-dessus exigent que la chose que vous commentez soit une expression S syntaxiquement correcte.

Certains dialectes Lisp ont un commentaire sur plusieurs lignes qui peut contenir du texte arbitraire, mais je n'en vois pas pour Clojure.


20
Un formulaire de commentaire de texte arbitraire sur plusieurs lignes Clojure n'existe pas. J'ai soumis un correctif en ajoutant # | ...... | # commentaires, mais il a été rejeté comme une fonctionnalité non souhaitée. Il est donc peu probable qu'il soit ajouté de si tôt.
amalloy le

5
@amalloy: Quelle était la justification? Tout simplement pas nécessaire, ou y avait-il une objection?
Ted

2
J'écris souvent de longs commentaires dans une imitation de style de programmation littéraire. J'utilise juste emacs pour redistribuer les commentaires multilignes (dans le *scratch*tampon, tapez simplement des messages indésirables après ; ;;ou ;;;sur plusieurs lignes, placez le curseur sur le premier mot après les points-virgules et appuyez sur Meta-Q).
Reb.Cabin

25

Les guillemets doubles (chaîne littérale) permettent d'ajouter du texte arbitraire (pas seulement des formes S appropriées):

(comment "

public class HelloWorld {
    public static void main(String[] args) {
        System.out.print("Hello, World");
        System.out.println();
    }
}

")

4
belle astuce qui a fonctionné pour moi! Mais comment est-il possible que les citations sur "Hello World" n'aient pas besoin d'être échappées?
marathon

6
C'est juste de la chance. L'exemple d'Ivan analyse en 4 formes: la première forme est une chaîne, la seconde forme est le symbole Hello, la 3ème forme est le symbole Worldet la 4ème forme est une autre chaîne. commentignore simplement toutes les formes. Donc, dans l'exemple, nous avons de la chance que l' Hello, Worldanalyse soit une clojure légale. Cela ne fonctionne pas avec du texte arbitraire. Par exemple, (comment "print("/foo")")mourra avec l'erreur Invalid token: /foo.
John Wiseman

17

D'autres exemples sont excellents, je voudrais juste ajouter une autre astuce:

Parfois, vous voulez commenter quelques lignes de code, mais demandez au compilateur de le compiler et de signaler toute erreur (par exemple, un ensemble de commandes dans un espace de noms de niveau supérieur que vous prévoyez d'exécuter plus tard au REPL).

Dans ce cas, j'aime envelopper le code avec (fn [] .....)ce qui signifie qu'il est toujours compilé, il n'est tout simplement pas appelé.



9

Lorsque j'utilise emacs et cider, il y a une commande M-x comment-regionque j'utilise souvent.


2

Dans Emacs, vous pouvez utiliser la commande M-;(le raccourci pour M-x comment-dwim). Il commentera ou décommentera toute région marquée de texte / code, donc, tant que votre fonction entière ou votre ensemble de fonctions est inclus dans la région, vous pouvez commenter ou décommenter cette région assez facilement. Le manuel de référence Emacs pour la fonction M-;peut être trouvé ici .


2

Il y a plusieurs façons dont je connais:

La première utilise la macro de commentaire : elle n'évalue pas tout le code à l'intérieur du corps du commentaire (mais elle vérifie toujours l'équilibre des parenthèses / crochets). Si vous connaissez votre chemin avec le paredit, cela ne prendra pas beaucoup de temps si vous voulez commenter quelques appels sexuels.

(comment 
 (println 1))

Cependant, il vérifiera toujours la correspondance des parenthèses. Donc, si vous avez des parenthèses déséquilibrées, votre code ne compilera pas (ce qui donnejava.lang.RuntimeException: EOF while reading ).

Une autre façon consiste à utiliser #_(aka la macro de suppression): elle supprimera le prochain sexp, ce que je préfère personnellement (plus rapide à taper et normalement je le fais sur sexps lorsque je dois déboguer):

#_(println 1)

Il vérifie également les délimiteurs sans correspondance: donc si vous avez des parenthèses déséquilibrées, il ne se compilera pas non plus.

Enfin, il y a le ;caractère qui commentera la ligne (similaire à la fonction de commentaire des autres langues) et la compilation l'ignorera complètement. Si vous souhaitez commenter plusieurs lignes, vous devez ajouter toutes les lignes avec; , qui sont normalement un problème, mais généralement les éditeurs de texte le feront pour vous avec une commande après avoir sélectionné plusieurs lignes.

;  (println 1)
;  (println 1 also won't break

0

Pour un long bloc de commentaires, les macros #_ ou (commentaire ...) ne fonctionnaient pas de manière propriétaire, puis j'ai fait un bloc de commentaires avec VSCODE (OS X).

  1. Mettez en surbrillance le bloc de commentaires.
  2. appuyez sur commande + shift + p dans vscode.
  3. trouver "Ajouter un commentaire de ligne"
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.