Clojure join无法根据filter函数的结果创建一个字符串

Ann*_*cka 5 clojure

我正在尝试编写一个函数,它接受一个字符串并返回一个过滤函数的结果(我正在解决4clojure问题).结果也必须是字符串.

我写过:

(fn my-caps [s]
  (filter #(Character/isUpperCase %) s))

(my-caps "HeLlO, WoRlD!")

Result: (\H \L \O \W \R \D)
Run Code Online (Sandbox Code Playgroud)

现在我正在尝试使用clojure.string/join从这个列表中创建一个字符串,如下所示:

(fn my-caps [s]
  (clojure.string/join (filter #(Character/isUpperCase %) s)))
Run Code Online (Sandbox Code Playgroud)

结果是一样的.我也尝试过使用apply str,没有成功.

nta*_*lbs 3

尝试这个:

(defn my-caps [s]
  (->> (filter #(Character/isUpperCase %) s)
       (apply str)))
Run Code Online (Sandbox Code Playgroud)

filter函数返回一个惰性序列。如果你想得到 a string,你应该通过应用函数将序列转换为字符串str

  • @ÓscarLópez 是的,你是对的。结果是一样的。然而,使用“->>”可以更轻松地阅读代码,并按照我的思维过程进行输入。就是这样。这是一种个人喜好。 (2认同)