Ich dachte, ich vermisse mein # || #, aber das ist viel besser.
Unj2
4
Ich hoffe du hast Spaß mit Clojure. :)
Rayne
14
Ein Wort der Vorsicht: Es scheint, als müsste alles, was sich in einem (Kommentar ...) befindet, eine richtige Form haben. zB (Kommentar Hallo: Welt) ist in Ordnung, aber (Kommentar Hallo: Welt) ergibt eine Ausnahme. [Bearbeiten:] Es scheint, als hätte ich die Antwort von Greg Hewgill lesen sollen, bevor ich diesen Kommentar gepostet habe ... na ja, ich werde es trotzdem belassen, falls jemand das Gleiche tut wie ich.
Paul
19
Ein Wort der Warnung - das (Kommentar-) Makro wird auf Null erweitert. Verwenden Sie #_, um ein einzelnes Formular zu kommentieren, oder #_ (Kommentar ...), um mehrere Formulare zu kommentieren, ohne eine Null einzufügen.
Clojure unterstützt ein #_Lesemakro, das das nächste Formular vollständig überspringt. Dies wird auf der Seite über den Clojure Reader erwähnt . Es gibt auch das Kommentarmakro, das einen ähnlichen Effekt hat, aber anders implementiert ist.
Beides erfordert, dass das, was Sie auskommentieren, ansonsten ein syntaktisch korrekter S-Ausdruck ist.
Einige Lisp-Dialekte haben einen mehrzeiligen Kommentar, der beliebigen Text enthalten kann, aber ich sehe keinen für Clojure.
Ein mehrzeiliges Clojure-Kommentarformular für beliebigen Text existiert nicht. Ich habe einen Patch mit # | ...... | # Kommentaren eingereicht, der jedoch als nicht erwünschte Funktion abgelehnt wurde. Es ist also unwahrscheinlich, dass es bald hinzugefügt wird.
Amalloy
5
@amalloy: Was war das Grundprinzip? Nur nicht nötig oder gab es einen Einwand?
Ted
2
Ich schreibe oft lange Kommentare in einer Nachahmung des literarischen Programmierstils. Ich verwende nur Emacs, um mehrzeilige Kommentare erneut zu fließen (geben Sie im *scratch*Puffer einfach etwas Junk nach ;;;oder ;;;in mehreren Zeilen ein, setzen Sie den Cursor auf das erste Wort nach den Semikolons und drücken Sie Meta-Q).
Reb.Cabin
25
Doppelte Anführungszeichen (String-Literal) ermöglichen das Hinzufügen von beliebigem Text (nicht nur richtige S-Formulare):
(comment "
public class HelloWorld {
public static void main(String[] args) {
System.out.print("Hello, World");
System.out.println();
}
}
")
schöner Trick, der bei mir funktioniert hat! Aber wie ist es möglich, dass die Zitate auf "Hello World" nicht maskiert werden müssen?
Marathon
6
Es ist nur Glück. Iwans Beispiel wird in vier Formen unterteilt: Die erste Form ist eine Zeichenfolge, die zweite Form ist das Symbol Hello, die dritte Form ist das Symbol Worldund die vierte Form ist eine weitere Zeichenfolge. commentignoriert einfach alle Formen. In dem Beispiel haben wir das Glück, dass es Hello, Worldals legale Clojure analysiert wird. Es funktioniert nicht mit beliebigem Text. Zum Beispiel (comment "print("/foo")")wird mit dem Fehler sterben Invalid token: /foo.
John Wiseman
17
Andere Beispiele sind großartig, ich möchte nur noch einen Trick hinzufügen:
Manchmal möchten Sie einige Codezeilen auskommentieren, aber dennoch vom Compiler kompilieren lassen und Fehler melden (z. B. eine Reihe von Befehlen in einem Namespace der obersten Ebene, die Sie später auf der REPL ausführen möchten).
In diesem Fall möchte ich den Code umschließen, (fn [] .....)was bedeutet, dass er immer noch kompiliert wird und einfach nicht aufgerufen wird.
In Emacs können Sie den Befehl M-;(die Verknüpfung für M-x comment-dwim) verwenden. Es markiert oder kommentiert jeden markierten Bereich von Text / Code. Solange Ihre gesamte Funktion oder Ihr Funktionssatz in der Region enthalten ist, können Sie diesen Bereich ganz einfach kommentieren oder auskommentieren. Das Emacs-Referenzhandbuch für die Funktion M-;finden Sie hier .
Zuerst wird das Kommentarmakro verwendet : Es wertet nur nicht den gesamten Code im Kommentartext aus (es wird jedoch weiterhin nach ausgewogenen Klammern / Klammern gesucht). Wenn Sie sich mit paredit auskennen, wird es nicht lange dauern, bis Sie ein paar Sexp-Anrufe kommentieren möchten.
(comment
(println 1))
Es wird jedoch weiterhin geprüft, ob die Klammern übereinstimmen. Wenn Sie also eine unausgeglichene Klammer haben, wird Ihr Code nicht kompiliert (ergibt java.lang.RuntimeException: EOF while reading).
Eine andere Möglichkeit ist die Verwendung #_(auch bekannt als das Makro zum Verwerfen): Es wird das nächste Sexp verwerfen, was ich persönlich bevorzuge (schneller zu tippen und normalerweise mache ich das auf Sexps, wenn ich debuggen muss):
#_(println 1)
Es wird auch nach nicht übereinstimmenden Trennzeichen gesucht. Wenn Sie also eine unausgeglichene Klammer haben, wird es auch nicht kompiliert.
Schließlich gibt es das ;Zeichen, das die Zeile kommentiert (ähnlich wie die Kommentarfunktion in anderen Sprachen), und die Kompilierung ignoriert sie vollständig. Wenn Sie mehrere Zeilen kommentieren möchten, müssen Sie allen Zeilen voranstellen. Dies ist normalerweise ein Ärger, aber normalerweise erledigen Texteditoren dies mit einem Befehl für Sie, nachdem Sie mehrere Zeilen ausgewählt haben.
Für einen langen Kommentarblock funktionierten die Makros #_ oder (Kommentar ...) nicht so proprietär, dann habe ich einen Kommentarblock mit VSCODE (OS X) erstellt.
Clojure unterstützt ein
#_
Lesemakro, das das nächste Formular vollständig überspringt. Dies wird auf der Seite über den Clojure Reader erwähnt . Es gibt auch das Kommentarmakro, das einen ähnlichen Effekt hat, aber anders implementiert ist.Beides erfordert, dass das, was Sie auskommentieren, ansonsten ein syntaktisch korrekter S-Ausdruck ist.
Einige Lisp-Dialekte haben einen mehrzeiligen Kommentar, der beliebigen Text enthalten kann, aber ich sehe keinen für Clojure.
quelle
*scratch*
Puffer einfach etwas Junk nach;
;;
oder;;;
in mehreren Zeilen ein, setzen Sie den Cursor auf das erste Wort nach den Semikolons und drücken SieMeta-Q
).Doppelte Anführungszeichen (String-Literal) ermöglichen das Hinzufügen von beliebigem Text (nicht nur richtige S-Formulare):
quelle
Hello
, die dritte Form ist das SymbolWorld
und die vierte Form ist eine weitere Zeichenfolge.comment
ignoriert einfach alle Formen. In dem Beispiel haben wir das Glück, dass esHello, World
als legale Clojure analysiert wird. Es funktioniert nicht mit beliebigem Text. Zum Beispiel(comment "print("/foo")")
wird mit dem Fehler sterbenInvalid token: /foo
.Andere Beispiele sind großartig, ich möchte nur noch einen Trick hinzufügen:
Manchmal möchten Sie einige Codezeilen auskommentieren, aber dennoch vom Compiler kompilieren lassen und Fehler melden (z. B. eine Reihe von Befehlen in einem Namespace der obersten Ebene, die Sie später auf der REPL ausführen möchten).
In diesem Fall möchte ich den Code umschließen,
(fn [] .....)
was bedeutet, dass er immer noch kompiliert wird und einfach nicht aufgerufen wird.quelle
Siehe diesen Link: http://en.wikibooks.org/wiki/Clojure_Programming/Tutorials_and_Tips
Sie können mehrzeilige Kommentare mit der Syntax erstellen
quelle
Wenn
M-x comment-region
ich Emacs und Cider benutze, gibt es einen Befehl, den ich oft benutze.quelle
In Emacs können Sie den Befehl
M-;
(die Verknüpfung fürM-x comment-dwim
) verwenden. Es markiert oder kommentiert jeden markierten Bereich von Text / Code. Solange Ihre gesamte Funktion oder Ihr Funktionssatz in der Region enthalten ist, können Sie diesen Bereich ganz einfach kommentieren oder auskommentieren. Das Emacs-Referenzhandbuch für die FunktionM-;
finden Sie hier .quelle
Ich kenne mehrere Möglichkeiten:
Zuerst wird das Kommentarmakro verwendet : Es wertet nur nicht den gesamten Code im Kommentartext aus (es wird jedoch weiterhin nach ausgewogenen Klammern / Klammern gesucht). Wenn Sie sich mit paredit auskennen, wird es nicht lange dauern, bis Sie ein paar Sexp-Anrufe kommentieren möchten.
Es wird jedoch weiterhin geprüft, ob die Klammern übereinstimmen. Wenn Sie also eine unausgeglichene Klammer haben, wird Ihr Code nicht kompiliert (ergibt
java.lang.RuntimeException: EOF while reading
).Eine andere Möglichkeit ist die Verwendung
#_
(auch bekannt als das Makro zum Verwerfen): Es wird das nächste Sexp verwerfen, was ich persönlich bevorzuge (schneller zu tippen und normalerweise mache ich das auf Sexps, wenn ich debuggen muss):Es wird auch nach nicht übereinstimmenden Trennzeichen gesucht. Wenn Sie also eine unausgeglichene Klammer haben, wird es auch nicht kompiliert.
Schließlich gibt es das
;
Zeichen, das die Zeile kommentiert (ähnlich wie die Kommentarfunktion in anderen Sprachen), und die Kompilierung ignoriert sie vollständig. Wenn Sie mehrere Zeilen kommentieren möchten, müssen Sie allen Zeilen voranstellen. Dies ist normalerweise ein Ärger, aber normalerweise erledigen Texteditoren dies mit einem Befehl für Sie, nachdem Sie mehrere Zeilen ausgewählt haben.quelle
Für einen langen Kommentarblock funktionierten die Makros #_ oder (Kommentar ...) nicht so proprietär, dann habe ich einen Kommentarblock mit VSCODE (OS X) erstellt.
quelle