从http://www.braveclojure.com/functional-programming/开始,以下代码将修剪空格并替换" lol"用" LOL"。
(require '[clojure.string :as s])
(defn clean
[text]
(s/replace (s/trim text) #"lol" "LOL"))
(clean "My boa constrictor is so sassy lol! ")
; => "My boa constrictor is so sassy LOL!"
现在,根据网站,下面的代码减少了功能,相当于我们上面的内容。
(defn clean
[text]
(reduce (fn [string string-fn] (string-fn string))
[s/trim #(s/replace % #"lol" "LOL")]))
问题:我不明白text
参数如何传递到reduce函数中的匿名函数。如何编写一个类似的代码,将参数text
显式传递给reduce函数中的匿名函数?
答案 0 :(得分:0)
reduce
函数采用可选参数,即减少的初始值。如果未提供,则使用最后一个arg的第一项(在这种情况下当然不会起作用,但是当您有一系列与初始值具有相同有效类型的输入时,它会起作用)。
user> (defn clean
[text]
(reduce (fn [string string-fn] (string-fn string))
text
[clojure.string/trim #(clojure.string/replace % #"lol" "LOL")]))
#'user/clean
user> (clean "My boa constrictor is so sassy lol! ")
"My boa constrictor is so sassy LOL!"