Myślałem, że tęsknię za moim # || #, ale to jest o wiele lepsze.
unj2
4
Mam nadzieję, że dobrze się bawisz z Clojure. :)
Rayne,
14
Słowo ostrzeżenia: wydaje się, że wszystko, co znajduje się w (komentarzu ...), musi mieć odpowiednią formę; np. (komentarz hello: world) jest w porządku, ale (comment hello: world) daje wyjątek. [Edytuj:] Wygląda na to, że powinienem był przeczytać odpowiedź Grega Hewgilla przed opublikowaniem tego komentarza ... no cóż, i tak zostawię to na wypadek, gdyby ktoś zrobił to samo co ja.
paul
19
Słowo ostrzeżenia - makro (komentarz) rozwija się do zera. Użyj #_, aby skomentować pojedynczy formularz lub #_ (komentarz ...), aby skomentować wiele formularzy bez wstawiania zera.
Clojure obsługuje #_makro czytnika, które całkowicie pomija następny formularz. Jest to wspomniane na stronie o Clojure Reader . Istnieje również makro komentarza, które ma podobny efekt, ale jest inaczej zaimplementowane.
Oba powyższe wymagają, aby rzecz, którą komentujesz, była inaczej składniowo poprawnym wyrażeniem S.
Niektóre dialekty Lisp mają wieloliniowy komentarz, który może zawierać dowolny tekst, ale nie widzę takiego dla Clojure.
Wielowierszowy formularz komentarza Clojure zawierający dowolny tekst nie istnieje. Przesłałem poprawkę dodającą # | ...... | # komentarze, ale została odrzucona jako niepożądana funkcja. Dlatego jest mało prawdopodobne, że zostanie dodany w najbliższym czasie.
amalloy
5
@amalloy: Jakie było uzasadnienie? Po prostu niepotrzebne, czy był sprzeciw?
Ted
2
Często piszę obszerne komentarze naśladując umiejętny styl programowania. Po prostu używam emacsa do ponownego przepływu komentarzy wielowierszowych (w *scratch*buforze po prostu wpisz jakieś śmieci po ;;;lub ;;;w wielu wierszach, ustaw kursor na pierwszym słowie po średniku i naciśnij Meta-Q).
Reb
25
Podwójne cudzysłowy (literał ciągu znaków) pozwalają na dodanie dowolnego tekstu (nie tylko odpowiednich formularzy S):
(comment "
public class HelloWorld {
public static void main(String[] args) {
System.out.print("Hello, World");
System.out.println();
}
}
")
niezła sztuczka, która zadziałała dla mnie! Ale jak to możliwe, że nie trzeba uciekać przed cytatami z „Hello World”?
maraton
6
To tylko szczęście. Przykład Ivana składa się z 4 form: pierwsza forma to ciąg, druga forma to symbol Hello, trzecia forma to symbol World, a czwarta forma to kolejny ciąg. commentpo prostu ignoruje wszystkie formularze. W tym przykładzie mamy szczęście, że Hello, Worldjest to traktowane jako prawne zamknięcie. Nie działa z dowolnym tekstem. Na przykład (comment "print("/foo")")umrze z błędem Invalid token: /foo.
John Wiseman
17
Inne przykłady są świetne, chciałbym tylko dodać jeszcze jedną sztuczkę:
Czasami chcesz skomentować kilka wierszy kodu, ale nadal kompilator kompiluje go i zgłasza wszelkie błędy (np. Zestaw poleceń w przestrzeni nazw najwyższego poziomu, którą planujesz wykonać później w REPL).
W tym przypadku lubię zawijać kod, (fn [] .....)co oznacza, że nadal jest kompilowany, po prostu nie jest wywoływany.
W Emacsie możesz użyć polecenia M-;(skrótu do M-x comment-dwim). Spowoduje to skomentowanie lub odkomentowanie dowolnego zaznaczonego obszaru tekstu / kodu, więc jeśli cała funkcja lub zestaw funkcji jest uwzględniona w regionie, możesz dość łatwo skomentować lub odkomentować ten region. Podręcznik referencyjny Emacsa dla tej funkcji M-;można znaleźć tutaj .
Pierwszym z nich jest użycie makra komentarza : nie ocenia ono tylko całego kodu wewnątrz treści komentarza (ale nadal sprawdza, czy nawiasy są wyważone). Jeśli znasz swój sposób na paredit, nie zajmie to dużo czasu, jeśli zechcesz skomentować kilka telefonów z seksem.
(comment
(println 1))
Jednak nadal będzie sprawdzać dopasowanie w nawiasach. Więc jeśli masz niezrównoważony nawias, kod nie będzie się kompilował (dawał java.lang.RuntimeException: EOF while reading).
Innym sposobem jest użycie #_(aka discard makro): odrzuci następny sexp, co osobiście wolę (szybsze pisanie i normalnie robię to na sexpsach, kiedy muszę debugować):
#_(println 1)
Sprawdza również niedopasowane ograniczniki: więc jeśli masz niezrównoważony nawias, nie będzie się również kompilował.
Wreszcie, istnieje ;znak, który skomentuje linię (podobnie jak funkcja komentarzy w innych językach), a kompilacja całkowicie ją zignoruje. Jeśli chcesz skomentować wiele wierszy, musisz poprzedzić wszystkie wiersze znakiem; , które zwykle są kłopotliwe, ale zazwyczaj edytory tekstu robią to za Ciebie za pomocą polecenia po zaznaczeniu wielu wierszy.
Clojure obsługuje
#_
makro czytnika, które całkowicie pomija następny formularz. Jest to wspomniane na stronie o Clojure Reader . Istnieje również makro komentarza, które ma podobny efekt, ale jest inaczej zaimplementowane.Oba powyższe wymagają, aby rzecz, którą komentujesz, była inaczej składniowo poprawnym wyrażeniem S.
Niektóre dialekty Lisp mają wieloliniowy komentarz, który może zawierać dowolny tekst, ale nie widzę takiego dla Clojure.
źródło
*scratch*
buforze po prostu wpisz jakieś śmieci po;
;;
lub;;;
w wielu wierszach, ustaw kursor na pierwszym słowie po średniku i naciśnijMeta-Q
).Podwójne cudzysłowy (literał ciągu znaków) pozwalają na dodanie dowolnego tekstu (nie tylko odpowiednich formularzy S):
źródło
Hello
, trzecia forma to symbolWorld
, a czwarta forma to kolejny ciąg.comment
po prostu ignoruje wszystkie formularze. W tym przykładzie mamy szczęście, żeHello, World
jest to traktowane jako prawne zamknięcie. Nie działa z dowolnym tekstem. Na przykład(comment "print("/foo")")
umrze z błędemInvalid token: /foo
.Inne przykłady są świetne, chciałbym tylko dodać jeszcze jedną sztuczkę:
Czasami chcesz skomentować kilka wierszy kodu, ale nadal kompilator kompiluje go i zgłasza wszelkie błędy (np. Zestaw poleceń w przestrzeni nazw najwyższego poziomu, którą planujesz wykonać później w REPL).
W tym przypadku lubię zawijać kod,
(fn [] .....)
co oznacza, że nadal jest kompilowany, po prostu nie jest wywoływany.źródło
Zobacz ten link: http://en.wikibooks.org/wiki/Clojure_Programming/Tutorials_and_Tips
Za pomocą składni można tworzyć komentarze wielowierszowe
źródło
Podczas używania emacsa i cydru jest polecenie,
M-x comment-region
którego często używam.źródło
W Emacsie możesz użyć polecenia
M-;
(skrótu doM-x comment-dwim
). Spowoduje to skomentowanie lub odkomentowanie dowolnego zaznaczonego obszaru tekstu / kodu, więc jeśli cała funkcja lub zestaw funkcji jest uwzględniona w regionie, możesz dość łatwo skomentować lub odkomentować ten region. Podręcznik referencyjny Emacsa dla tej funkcjiM-;
można znaleźć tutaj .źródło
Znam wiele sposobów:
Pierwszym z nich jest użycie makra komentarza : nie ocenia ono tylko całego kodu wewnątrz treści komentarza (ale nadal sprawdza, czy nawiasy są wyważone). Jeśli znasz swój sposób na paredit, nie zajmie to dużo czasu, jeśli zechcesz skomentować kilka telefonów z seksem.
Jednak nadal będzie sprawdzać dopasowanie w nawiasach. Więc jeśli masz niezrównoważony nawias, kod nie będzie się kompilował (dawał
java.lang.RuntimeException: EOF while reading
).Innym sposobem jest użycie
#_
(aka discard makro): odrzuci następny sexp, co osobiście wolę (szybsze pisanie i normalnie robię to na sexpsach, kiedy muszę debugować):Sprawdza również niedopasowane ograniczniki: więc jeśli masz niezrównoważony nawias, nie będzie się również kompilował.
Wreszcie, istnieje
;
znak, który skomentuje linię (podobnie jak funkcja komentarzy w innych językach), a kompilacja całkowicie ją zignoruje. Jeśli chcesz skomentować wiele wierszy, musisz poprzedzić wszystkie wiersze znakiem; , które zwykle są kłopotliwe, ale zazwyczaj edytory tekstu robią to za Ciebie za pomocą polecenia po zaznaczeniu wielu wierszy.źródło
W przypadku długiego bloku komentarzy, makra #_ lub (komentarz ...) nie działały tak, jak zastrzeżono, wtedy zrobiłem blok komentarza z VSCODE (OS X).
źródło