Pensé que extrañaría mi # || # pero esto es mucho mejor.
unj2
4
Espero que te estés divirtiendo con Clojure. :)
Rayne
14
Una advertencia: parece que lo que está dentro de un (comentario ...) debe tener una forma adecuada; por ejemplo, (comentario hola: mundo) está bien pero (comentario hola: mundo) produce una excepción. [Editar:] Parece que debería haber leído la respuesta de Greg Hewgill antes de publicar este comentario ... bueno, lo dejaré de todos modos en caso de que alguien haga lo mismo que yo.
paul
19
Una advertencia: la macro (comentario) se expande a cero. Utilice #_ para comentar un solo formulario, o #_ (comentar ...) para comentar varios formularios sin insertar un cero.
Clojure admite una #_macro de lector que omite por completo el siguiente formulario. Esto se menciona en la página sobre Clojure Reader . También existe la macro de comentarios que tiene un efecto similar, pero se implementa de manera diferente.
Los dos anteriores requieren que lo que está comentando sea una expresión S sintácticamente correcta.
Algunos dialectos Lisp tienen un comentario de varias líneas que puede contener texto arbitrario, pero no veo uno para Clojure.
No existe un formulario de comentario de texto arbitrario de varias líneas de Clojure. Envié un parche agregando # | ...... | # comentarios, pero fue rechazado por no ser una característica deseada. Por lo tanto, es poco probable que se agregue pronto.
amalloy
5
@amalloy: ¿Cuál fue el fundamento? ¿Simplemente no es necesario, o hubo alguna objeción?
Ted
2
A menudo escribo comentarios extensos en una imitación del estilo de programación alfabetizado. Solo uso emacs para volver a fluir comentarios de varias líneas (en el *scratch*búfer, simplemente escriba algo de basura después ;;;o ;;;en varias líneas, coloque el cursor en la primera palabra después del punto y coma y presione Meta-Q).
Reb.Cabin
25
Las comillas dobles (literal de cadena) permiten agregar texto arbitrario (no solo las formas S adecuadas):
(comment "
public class HelloWorld {
public static void main(String[] args) {
System.out.print("Hello, World");
System.out.println();
}
}
")
buen truco que funcionó para mí! Pero, ¿cómo es posible que las citas de "Hello World" no tengan que escaparse?
maratón
6
Es solo suerte. El ejemplo de Ivan se analiza en 4 formas: la primera forma es una cadena, la segunda forma es el símbolo Hello, la tercera forma es el símbolo Worldy la cuarta forma es otra cadena. commentsimplemente ignora todas las formas. Entonces, en el ejemplo, tenemos suerte de que se Hello, Worldanalice como clojure legal. No funciona con texto arbitrario. Por ejemplo, (comment "print("/foo")")morirá con el error Invalid token: /foo.
John Wiseman
17
Otros ejemplos son geniales, solo me gustaría agregar un truco más:
A veces, desea comentar algunas líneas de código, pero aún así el compilador lo compila y reporta cualquier error (por ejemplo, un conjunto de comandos en un espacio de nombres de nivel superior que planea ejecutar más tarde en el REPL).
En este caso, me gusta ajustar el código, lo (fn [] .....)que significa que aún se compila, simplemente no se llama.
En Emacs puede usar el comando M-;(el atajo para M-x comment-dwim). Comentará o descomentará cualquier región marcada de texto / código, por lo que, siempre que toda su función o conjunto de funciones esté incluido en la región, puede comentar o descomentar esa región con bastante facilidad. El manual de referencia de Emacs para la función M-;se puede encontrar aquí .
El primero es usar la macro de comentarios : solo no evalúa todo el código dentro del cuerpo del comentario (pero aún verifica el equilibrio entre paréntesis / corchetes). Si conoces tu camino con paredit, no te llevará mucho tiempo si quieres comentar algunas llamadas sexp.
(comment
(println 1))
Sin embargo, seguirá comprobando la coincidencia entre paréntesis. Entonces, si tiene paréntesis desequilibrados, su código no se compilará (produciendojava.lang.RuntimeException: EOF while reading ).
Otra forma es usar #_(también conocida como la macro de descarte): descartará el siguiente sexp, que es la forma en que personalmente prefiero (más rápido de escribir y normalmente lo hago en sexps cuando tengo que depurar):
#_(println 1)
También comprueba si hay delimitadores no coincidentes: por lo tanto, si tiene paréntesis desequilibrados, no se compilará también.
Por último, está el ;carácter que comentará la línea (similar a la función de comentarios de otros idiomas) y la compilación lo ignorará por completo. Si desea comentar varias líneas, debe anteponer todas las líneas con; , que normalmente son una molestia, pero normalmente los editores de texto lo hacen por usted con un comando después de seleccionar varias líneas.
Clojure admite una
#_
macro de lector que omite por completo el siguiente formulario. Esto se menciona en la página sobre Clojure Reader . También existe la macro de comentarios que tiene un efecto similar, pero se implementa de manera diferente.Los dos anteriores requieren que lo que está comentando sea una expresión S sintácticamente correcta.
Algunos dialectos Lisp tienen un comentario de varias líneas que puede contener texto arbitrario, pero no veo uno para Clojure.
fuente
*scratch*
búfer, simplemente escriba algo de basura después;
;;
o;;;
en varias líneas, coloque el cursor en la primera palabra después del punto y coma y presioneMeta-Q
).Las comillas dobles (literal de cadena) permiten agregar texto arbitrario (no solo las formas S adecuadas):
fuente
Hello
, la tercera forma es el símboloWorld
y la cuarta forma es otra cadena.comment
simplemente ignora todas las formas. Entonces, en el ejemplo, tenemos suerte de que seHello, World
analice como clojure legal. No funciona con texto arbitrario. Por ejemplo,(comment "print("/foo")")
morirá con el errorInvalid token: /foo
.Otros ejemplos son geniales, solo me gustaría agregar un truco más:
A veces, desea comentar algunas líneas de código, pero aún así el compilador lo compila y reporta cualquier error (por ejemplo, un conjunto de comandos en un espacio de nombres de nivel superior que planea ejecutar más tarde en el REPL).
En este caso, me gusta ajustar el código, lo
(fn [] .....)
que significa que aún se compila, simplemente no se llama.fuente
Vea este enlace: http://en.wikibooks.org/wiki/Clojure_Programming/Tutorials_and_Tips
Puede crear comentarios de varias líneas con la sintaxis
fuente
Cuando uso emacs y sidra, hay un comando
M-x comment-region
que uso a menudo.fuente
En Emacs puede usar el comando
M-;
(el atajo paraM-x comment-dwim
). Comentará o descomentará cualquier región marcada de texto / código, por lo que, siempre que toda su función o conjunto de funciones esté incluido en la región, puede comentar o descomentar esa región con bastante facilidad. El manual de referencia de Emacs para la funciónM-;
se puede encontrar aquí .fuente
Hay varias formas que conozco:
El primero es usar la macro de comentarios : solo no evalúa todo el código dentro del cuerpo del comentario (pero aún verifica el equilibrio entre paréntesis / corchetes). Si conoces tu camino con paredit, no te llevará mucho tiempo si quieres comentar algunas llamadas sexp.
Sin embargo, seguirá comprobando la coincidencia entre paréntesis. Entonces, si tiene paréntesis desequilibrados, su código no se compilará (produciendo
java.lang.RuntimeException: EOF while reading
).Otra forma es usar
#_
(también conocida como la macro de descarte): descartará el siguiente sexp, que es la forma en que personalmente prefiero (más rápido de escribir y normalmente lo hago en sexps cuando tengo que depurar):También comprueba si hay delimitadores no coincidentes: por lo tanto, si tiene paréntesis desequilibrados, no se compilará también.
Por último, está el
;
carácter que comentará la línea (similar a la función de comentarios de otros idiomas) y la compilación lo ignorará por completo. Si desea comentar varias líneas, debe anteponer todas las líneas con; , que normalmente son una molestia, pero normalmente los editores de texto lo hacen por usted con un comando después de seleccionar varias líneas.fuente
Para un bloque de comentarios largo, Macros #_ o (comentario ...) no funcionó como propietario, luego hice el bloque de comentarios con VSCODE (OS X).
fuente