2014-01-21 2 views
2

나는 Clojure에서 특히 Noir 웹 프레임 워크를 망쳐 놓고 무작위로 타일을 그리려하고있다.반복적으로 clojure에서 무작위 요소를 얻는다.

이것은 아마도 매우 나쁜 코드이지만 나는 배우고있다! : D

(def tiles [:stairs :stone :monster]) 

(defpage "/" [] 
    (common/layout 
     [:div {:class "level"} 
     (repeatedly 10 [:div {:class "row"} 
      (repeatedly 10 
      [:div {:class (str "tile " (name (rand-nth tiles)))}])])])) 

하지만이 코드는 예외를 던지고있다 :

Wrong number of args (0) passed to: PersistentVector - (class clojure.lang.ArityException) 

답변

5

repeatedly 함수를 걸립니다 당신이 기능에 시신을 포장 할 필요가 있도록 몸 :

(repeatedly 10 (fn [] 
       [:div 
       {:class "row"} 
       (repeatedly 10 (fn [] 
            [:div {:class (str "tile " (name (rand-nth tiles)))}]))])) 
+1

아, [] 전에 fn을 시도 할 때. 나는 Clojure/Noir가 이것을 아주 예리하게 처리하기를 바라고 있다고 말해야한다 :> 고마워! –

+0

@KristjanOddsson, 문제 없습니다! 사실 Clojure가 여기에 너무 영리 해지지 않으려 고합니다. 보통은 기능을 함수로 전달합니다. – ponzao

4

답변 :

user=> (repeatedly 10 (fn [] [:div])) 
([:div] [:div] [:div] [:div] [:div] [:div] [:div] [:div] [:div] [:div]) 


user=> (repeatedly 10 [:div])  
ArityException Wrong number of args (0) passed to: PersistentVector clojure.lang.AFn.throwArity (AFn.java:437) 


user=> (doc repeatedly) 
------------------------- 
clojure.core/repeatedly 
([f] [n f]) 
    Takes a function of no args, presumably with side effects, and 
    returns an infinite (or length n if supplied) lazy sequence of calls 
    to it 
nil 
user=>