我正在尝试在clojure中编写一个通用的serilization函数.像这样的东西
(def input-map {:Name "Ashwani" :Title "Dev"})
(defn serialize [input-map delimiter]
...rest of the code
)
Run Code Online (Sandbox Code Playgroud)
哪个叫
(serialize input-map ",") Produces
Ashwani,Dev
Run Code Online (Sandbox Code Playgroud)
我现在有一些东西,需要地图的特定键,但这样做
(defn serialize [input-map]
(map #(str (% :Name) "," (% :Title) "\n") input-map ) )
Run Code Online (Sandbox Code Playgroud)
我想要避免的是那里的硬编码名称和标题.必须有一些方法来使用反射或某些东西来实现这一点,但不幸的是我不知道足够的clojure来完成这件事.
(defn serialize [m sep] (apply str (concat (interpose sep (vals m)) ["\n"])))
Run Code Online (Sandbox Code Playgroud)
试一试:
(require 'clojure.string)
(defn serialize [m sep] (str (clojure.string/join sep (map (fn [[_ v]] v) m)) "\n"))
(def input-map {:Name "Ashwani" :Title "Dev"})
(serialize input-map ",")
Run Code Online (Sandbox Code Playgroud)
产量
"Ashwani,Dev\n"
Run Code Online (Sandbox Code Playgroud)
不确定这有多惯用,但它应该对你有用。
更新: 朱利安的答案比我的好得多! vals...我怎么能错过呢:)
| 归档时间: |
|
| 查看次数: |
3620 次 |
| 最近记录: |