我正在阅读一本关于clojure的书,并遇到了“->>”的绊脚石。作者提供了一个使用更惯用的方法comp
将关键字转换为 clojure map 的示例。这是使用comp的代码:camelCased
camel-cased
(require '[clojure.string :as str])
(def camel->keyword (comp keyword
str/join
(partial interpose \-)
(partial map str/lower-case)
#(str/split % #"(?<=[a-z])(?=[A-Z])")))
这很有意义,但我真的不喜欢到处使用partial
来处理可变数量的参数。相反,这里提供了一个替代方案:
(defn camel->keyword
[s]
(->> (str/split s #"(?<=[a-z])(?=[A-Z])")
(map str/lower-case)
(interpose \-)
str/join
keyword))
这种语法更具可读性,并且模仿了我解决问题的方式(从前到后,而不是从后到前)。扩展comp
以完成上述目标...
(def camel-pairs->map (comp (partial apply hash-map)
(partial map-indexed (fn [i x]
(if (odd? i)
x
(camel->keyword x))))))
什么是等效的使用->>
?我不确定如何使用->>
. 这是错误的:
(defn camel-pairs->map
[s]
(->> (map-indexed (fn [i x]
(if (odd? i)
x
(camel-keyword x)))
(apply hash-map)))