【发布时间】:2017-01-14 15:08:48
【问题描述】:
我正在尝试对this 脚本进行一些修改。这个方法给出:
(defn- emit-class!
[[class fields]]
(let [vals {:view? (:view? class)
:type (if (:view? class) "View" "Object")
:package (:package class)
:name (str (:dollar-name class) Icepick/SUFFIX)
:target (:dotted-name class)
:parent (if-let [parent (:qualified-parent-name class)]
(str parent Icepick/SUFFIX)
(if (:view? class) "View" "Object"))
:fields fields}
file-name (str (:package class) "." (:dollar-name class) Icepick/SUFFIX)
file-object (file-object file-name (:element class))]
(doto (.openWriter file-object)
(.write (mustache/render-string template vals))
(.flush)
(.close))))
据我了解,此代码fields 是一个包含地图的列表。如果我用
(doseq [fff fields
[k v] fff]
(info (str k " " fff)))
然后我得到这个内容
{
:name "counterAlt",
:enclosing-class
{
:package "com.some.package",
:dotted-name "DemoPresenter",
:dollar-name "DemoPresenter",
:annote (#object[com.sun.tools.javac.code.Attribute$Compound 0x6054b6e "@com.Bla"]),
:elem #object[com.sun.tools.javac.code.Symbol$ClassSymbol 0x21312e84 "com.evernote.android.common.demo.DemoPresenter"],
:view? false,
:qualified-parent-name nil
},
:bundler false,
:method "Int"
}
我要做的是将另一个名为fieldsCapitalize 的值添加到vals 变量中,其中列表中的映射完全相同,但只有name 大写。在此示例中,counterAlt 应变为 CounterAlt。
我有一个有效的大写函数,但我无法使用更新的地图创建另一个列表。在此功能中实现此目的的最佳方法是什么?
【问题讨论】:
标签: clojure clojure-java-interop