2012-08-16 51 views
10

爲什麼以下不起作用?這就是爲什麼它會拋出異常?:在clojure中,爲什麼包含url的塊註釋會引發異常?

(comment 

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

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

) 

用另一個字符串替換該網址,它似乎是好的。

(comment 

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

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

) 
+0

它的組合'​​:/'的URL。這兩個角色在clojure中都有特殊的含義,但不知道爲什麼他們不會在評論宏中工作。 – Kevin 2012-08-16 14:41:34

+1

@Kevin因爲宏的主體仍然需要被解析,即使它們沒有被評估。該URL不解析。 – 2012-08-16 14:42:27

回答

10

因爲URL是不是一個有效的標記:

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

而你不得不可以被解讀爲Clojure的形式另一個字符串:

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

也就是說,Clojure的可不分析第一個例子,不管它是否在(comment ...)

爲了完整起見,請注意,網址是罰款與;評論:

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

我最好總是用';'作爲'評論'的評論宏(我從你那裏學到的)評估它的內容? – user193116 2012-08-16 15:58:55

+3

@ user193116'comment'不**評估它的主體 - 儘管它的主體是**解析**。我個人總是使用';'進行評論,因爲它在視覺上更加獨特(現在也因爲你發現的問題)。如果我匆忙或懶惰,我只會使用'comment'。我曾經和一個從不刪除代碼的人一起工作,只是把'(comment ...)'放在它的周圍 - 使代碼很難閱讀。 ...但這只是個人的品味。因人而異。 – 2012-08-16 16:13:15

+1

爲了完整起見,值得注意的是'#_'閱讀器語法指示讀者不要解析下面的表格。 – Hugh 2012-08-17 02:52:38

相關問題