我正在尝试编写一个函数,该函数接受字符串并返回过滤函数的结果(我正在解决 4clojure 问题)。结果也必须是一个字符串。
我写了这个:
(fn my-caps [s]
(filter #(Character/isUpperCase %) s))
(my-caps "HeLlO, WoRlD!")
Result: (\H \L \O \W \R \D)
现在我尝试使用 clojure.string/join 从该列表中创建一个字符串,如下所示:
(fn my-caps [s]
(clojure.string/join (filter #(Character/isUpperCase %) s)))
但是结果是一样的。我也尝试过使用 apply str
,但没有成功。
最佳答案
您必须通过应用 str
函数将 filter
返回的惰性序列转换为字符串。另外,使用 defn
定义一个新函数 - 操作方法如下:
(defn my-caps [s]
(apply str (filter #(Character/isUpperCase %) s)))
它按预期工作:
(my-caps "HeLlO, WoRlD!")
=> "HLOWRD"
关于Clojure join 无法根据过滤函数的结果创建字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17265813/