2012-08-16 12 views
10

¿Por qué lo siguiente no funciona? Es por eso que arroja una excepción ?:En clojure, ¿por qué un comentario en bloque que contiene una url arroja una excepción?

(comment 

Replicate a Sequence 
http://www.4clojure.com/problem/33 

     (= (__ [1 2 3] 2) '(1 1 2 2 3 3)) 

) 

Reemplace la url con otra cadena y parece estar bien.

(comment 

Replicate a Sequence 
replace the url and all is well. why 

     (= (__ [1 2 3] 2) '(1 1 2 2 3 3)) 

) 
+0

que es la combinación de ': /' en la URL. Ambos personajes tienen un significado especial en clojure, pero no están seguros de por qué no funcionarían en la macro de comentarios. – Kevin

+1

@Kevin porque los cuerpos de las macros aún tienen que analizarse, incluso si no se evalúan. La URL no analiza. –

Respuesta

10

porque la URL no es un token válido:

Clojure> http://www.4clojure.com/problem/33 
java.lang.RuntimeException: Invalid token: http://www.4clojure.com/problem/33 

mientras que la otra cadena que tenía puede leerse como formas de Clojure:

Clojure> (quote (replace the url and all is well. why)) 
(replace the url and all is well. why) 

Es decir, Clojure puede 't analizar el primer ejemplo, independientemente de si está en (comment ...).

Para completar, cuenta que la URL está muy bien con un comentario ;:

Clojure> 3 ; http://www.4clojure.com/problem/33 
3 
+0

estoy mejor usando siempre ';' para comentarios como macro 'comentario' (lo que aprendí de ti) evalúa su contenido? – user193116

+3

@ user193116 'comment' no ** evalúa ** su cuerpo, aunque su cuerpo está ** analizado **. Personalmente siempre uso ';' para comentarios, porque es más distintivo visualmente (y ahora también por el problema que encontraste). Solo usaría 'comment' si tuviera prisa o pereza. Trabajé con un chico una vez que nunca borró el código, simplemente puse '(comment ...)' a su alrededor, hizo que sea muy difícil leer el código. ... pero eso es solo gusto personal. YMMV. –

+1

Para completar, vale la pena señalar que la sintaxis del lector '# _' indica al lector que no analice el siguiente formulario. – Hugh

Cuestiones relacionadas