2012-08-16 13 views
10

Aşağıdakiler neden çalışmıyor? Başka bir dize ile url değiştirin istisna ?:clojure, neden bir url içeren bir blok yorumu bir istisna atar?

(comment 

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

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

) 

atmak yok nedeni budur ve ok gibi görünüyor.

(comment 

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

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

) 
+0

o kombinasyonu var ': /' adressen. Her iki karakterin clojure içinde özel bir anlamı vardır, ancak neden yorum makrosunda çalışmayacaklarından emin değiller. – Kevin

+1

@Kevin çünkü makroların gövdeleri, değerlendirilmese bile ayrıştırılmak zorunda. URL ayrıştırmıyor. –

cevap

10

url geçerli bir belirteç olmadığı için: is

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

, Clojure yapabilirsiniz: Eğer Clojure formları olarak okunabilir vardı diğer dize Oysa

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

İlk örneğini, (comment ...)'da olup olmadığına bakılmaksızın ayrıştırmayın.

Bütünlüğü için

, url bir ; yorum ile ince olduğuna dikkat:

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

Her zaman daha iyiyim ';' 'Yorum' makrosu olarak yorum yapmak için (sizden öğrendiklerim) içeriğini değerlendirir misiniz? – user193116

+3

@ user193116 'comment', Vücudunu - Vücudun ** parse edilmesine rağmen ** değerlendirmez **. Ben şahsen her zaman yorum yapmak için kullanıyorum, çünkü daha görsel olarak ayırt edici (ve şimdi de bulduğunuz problem yüzünden). Acelem ya da tembel olsaydım sadece 'comment' kullanırdım. Kodu hiç silmeden bir adamla çalıştım, sadece '' (yorum ...) 'dizesi koydum, kodu okumak çok zor oldu. ... ama bu sadece kişisel tadı. YMMV. –

+1

Tamlık için, '# _' okuyucusu sözdizimi, okuyucuyu aşağıdaki formu ayrıştırmama konusunda bilgilendirir. – Hugh

İlgili konular