在clojure中反复获取随机元素

Kri*_*son 2 clojure noir

我在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)))}])])]))
Run Code Online (Sandbox Code Playgroud)

但是这段代码抛出异常:

Wrong number of args (0) passed to: PersistentVector - (class clojure.lang.ArityException)
Run Code Online (Sandbox Code Playgroud)

pon*_*zao 5

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

(repeatedly 10 (fn []
                 [:div
                 {:class "row"}
                 (repeatedly 10 (fn []
                                  [:div {:class (str "tile " (name (rand-nth tiles)))}]))]))
Run Code Online (Sandbox Code Playgroud)