2

我在 Clojure 特别是 Noir web 框架中搞乱,并试图生成一个随机的瓷砖网格。

这可能是非常糟糕的代码,但我正在学习!: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)
4

3 回答 3

5

repeatedly采用函数而不是主体,因此您需要将主体包装在函数中:

(repeatedly 10 (fn []
                 [:div
                 {:class "row"}
                 (repeatedly 10 (fn []
                                  [:div {:class (str "tile " (name (rand-nth tiles)))}]))]))
于 2014-01-21T07:53:04.383 回答
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=>
于 2014-01-21T07:52:47.367 回答
1
(def tiles [:stairs :stone :monster]) 

(defpage "/" []
     (common/layout
       [:div {:class "level"}
        (repeatedly 10 (fn []
                 [:div
                 {:class "row"}
                 (repeatedly 10 (fn []
                                  [:div {:class (str "tile " (name (rand-nth tiles)))}]))]))
于 2018-04-30T04:51:26.927 回答