2015-09-07 43 views
0

我有一個向量:向量在ClojureScript中的元素?

(def my-collection ["image1.jpg" "image2.jpg" "image3.jpg"]) 

,我想提出3個圖像文件。

(println (count my-collection)) ; this prints count of my collection. This is 3. 

(map (fn [x] (println x)) my-collection) ; doesn't do anything! 

但是!

(def image-element (.createElement js/document "img")) 
(def insert-into-body (.appendChild (.-body js/document) image-element)) 
(set! (.-src image-element) "image1.jpg") 

此代碼完美適用於一個元素!

我應該爲集合做些什麼?

回答

3

map函數用於通過應用指定的函數將集合轉換爲另一個集合。由於(println x)返回nil,您的代碼的結果將是(nil, nil, nil)與副作用(每個圖像名稱打印在您的控制檯中)。

也許你想定義一個函數來創建一個帶有指定src的圖像元素。現在

(defn create-image [src] 
    (let [img (.createElement js/document "img")] 
    (set! (.-src img) src) 
    img)) 

,可以提供集合到圖像名稱映射到圖像元素,然後將其追加到body元素。

(doseq [i (map create-image my-collection)] 
    (.appendChild (.-body js/document) i)) 
+3

我認爲值得一提的是'map'在默認情況下也是懶惰的,並且大部分時間不是您想要引起副作用的東西。 –

+0

考慮副作用[doseq](http://clojuredocs.org/clojure.core/doseq) – birdspider

+0

非常感謝!這是美麗的解決方案! –