Bloquear comentarios en Clojure

Respuestas:

145

De hecho, ¡hay una manera!


(comment

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

Check me out! )

Simplemente envuelva sus comentarios en (comentario ..) :)

¡Que te diviertas!

Rayne
fuente
4
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.
trata bien a tus mods
Me recuerda esta macro: stackoverflow.com/questions/3732173/…
Felipe
100

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.

Greg Hewgill
fuente
20
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();
    }
}

")
Ivan Sviatenko
fuente
4
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.

mikera
fuente
9

Cuando uso emacs y sidra, hay un comando M-x comment-regionque uso a menudo.

claj
fuente
2

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í .

MLev
fuente
2

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.

(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.

;  (println 1)
;  (println 1 also won't break
Rodrigo Flores
fuente
0

Para un bloque de comentarios largo, Macros #_ o (comentario ...) no funcionó como propietario, luego hice el bloque de comentarios con VSCODE (OS X).

  1. Resalta el bloque de comentarios.
  2. presione comando + shift + p en vscode.
  3. busque "Agregar comentario de línea"
madeinQuant
fuente