Clojure join 无法根据过滤函数的结果创建字符串

标签 clojure

我正在尝试编写一个函数,该函数接受字符串并返回过滤函数的结果(我正在解决 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/

相关文章:

clojure - 为什么 Clojure 的 `let` 和 `for` 都是单子(monad)?

math - 使用clojure.math.numeric-tower或任何库

java - 如何在 Clojure 应用程序中使用 Spring Beans?

testing - 在 clojure 项目中组织测试层次结构

clojure - 从其他命名空间导入记录时出现 ClassNotFoundException

java - 使用 clojure 通过 java 互操作从数据集对象调用 groupBy 方法

java - 如何使用 clojure 实例化 Path 对象

clojure - 如何使用lein管理一个依赖的依赖?

clojure - 附加到 Enlive 中的属性

javascript - ClojureScript core.match 中匹配 false (== undefined, null)