我想在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