我想在clojure中寫一個函數,它會返回一個映射給出一個形式爲「key1 $ value1,key2 $ value2」的字符串。我想出了這個。如何防止這個clojure函數返回一個列表
(defn get-map
"Returns a map of key value pairs from a string formatted in the form 'key1$value1,key2$value2'"
[line]
(let [result {}]
(for [item (split line #",")]
(let [pair (split item #"\$")]
(assoc result (nth pair 0)
(if (= (.size pair) 2) (nth pair 1) ""))))))
雖然這個代碼的唯一問題是它返回列表中的地圖。
=>(get-map "key1$value1,key2,value2")
({"key1" "value1"} {"key2" "value2"})
我試圖返回結果作爲第一個表單的最後一個表達式,但結果是空的地圖。
(defn get-map
"Returns a map of key value pairs from a string formatted in the form 'key1$value1,key2$value2'"
[line]
(let [result {}]
(for [item (split line #",")]
(let [pair (split item #"\$")]
(assoc result (nth pair 0)
(if (= (.size pair) 2) (nth pair 1) ""))))
result))
=>(get-map "key1$value1,key2,value2")
{}
兩個問題 -
- 我應該如何修改只返回地圖功能,無單包裝?
- 爲什麼返回結果作爲第一個表單的最後一個表達式返回空映射?
此外,如果你有建議,寫一個更好,更習慣clojure方式,將不勝感激。
對問題1